zoukankan      html  css  js  c++  java
  • CLRS Ex2.1-4

    Ex2.1-4

    • Problem description:
    Input: two arrays lhs and rhs which store two n-bit binary numbers respectively
    Output: one array that stores an n+1-bit binary number, such that it is equal to the sum of lhs and rhs 
    • Pseudocode:
    Add-Binary-Numbers(lhs, rhs)
    1 def sum as an array with sum.length = lhs.lengh + 1
    2 def carry = 0
    3 for i = lhs.lengh - 1 to 0
    4   sum[i + 1] = (carry + lhs[i] + rhs[i]) % 2
    5   carry = (carry + lhs[i] + rhs[i]) / 2
    6 sum[0] = carry
    7 return sum
     
    // CLRS2.1.4.cpp : 定义控制台应用程序的入口点。
    //
    /*
    CLRS 2.1.4 
    */
    /*
    Add-Binary-Numbers(lhs, rhs)
    1 def sum as an array with sum.length = lhs.lengh + 1
    2 def carry = 0
    3 for i = lhs.lengh - 1 to 0
    4   sum[i + 1] = (carry + lhs[i] + rhs[i]) % 2
    5   carry = (carry + lhs[i] + rhs[i]) / 2
    6 sum[0] = carry
    7 return sum
    */
    #include "stdafx.h"
    #include<iostream>
    using namespace std;
    //获取数组长度
    int getArrlength(int *a)
    {
        return (sizeof(a) / sizeof(a[0]));
    }
    //由于C++不允许定义非常量大小的数组,因此先定义好再传入
    int * Add_Bin_Num(int lhs[],int rhs[],int sum[]){
        int carry = 0;
        //int lhslen = getArrlength(lhs);
        //cout << lhslen << endl;
        //此处9的值为lhs的长度10-1
        for (int i = 9; i >=0; i--){
            sum[i + 1] = (rhs[i] + lhs[i] + carry) % 2;
            carry = (lhs[i] + rhs[i] + carry) / 2;
            //cout << sum[i] << endl;
        }
        sum[0] = carry;
        return sum;
    }
    int main()
    {
        int lhs[10] = { 1, 0, 1, 0, 1, 1, 0, 0, 1, 1 };
        int rhs[10] = { 1, 0, 1, 0, 1, 1, 0, 1, 1, 1 };
        int sum[11] = { 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        int tmp;
        //for (int i = 0; i < 10; i++){
        //    cin >> tmp;
        //    lhs[i] = tmp;
        //}
        //for (int j = 0; j < 10; j++){
        //    cin >> tmp;
        //    lhs[j] = tmp;
        //}
        //while (cin >> tmp){
        //    lhs[i] = tmp;
        //    i++;
        //}
        //while (cin >> tmp){
        //    rhs[i] = tmp;
        //    i++;
        //}
        //cout << Add_Bin_Num(lhs, rhs, sum)[1];
        for (int x = 0; x < 11; x++){
            cout << Add_Bin_Num(lhs, rhs, sum)[x];
        }cout << endl;
        return 0;
    }
    
    
    
    //void convert(int a[], int n)
    //{
    //    int i;
    //    int temp;
    //    for (i = 0; i<n / 2; i++)
    //    {
    //        temp = a[i];
    //        a[i] = a[n - i - 1];
    //        a[n - i - 1] = temp;
    //    }
    //}
    //int *sum(int a[], int lengtha, int b[], int lengthb)
    //{
    //    convert(a, lengtha);
    //    convert(b, lengthb);
    //    int lengthc = lengtha>lengthb ? lengtha : lengthb;
    //    lengthc += 1;
    //    int *c = new int[lengthc];
    //    memset(c, 0, lengthc);
    //    int i, key = 0;
    //    for (i = 0; i<lengthc; i++)
    //    {
    //        if (lengtha <= i)
    //        {
    //            if (lengthb>i)
    //            {
    //                c[i] = b[i] + key;
    //                if (c[i] >= 2)
    //                {
    //                    c[i] %= 2;
    //                    key = 1;
    //                }
    //                else
    //                {
    //                    key = 0;
    //                }
    //            }
    //            else
    //            {
    //                c[i] = key;
    //            }
    //        }
    //        else if (lengtha>i)
    //        {
    //            if (lengthb>i)
    //            {
    //                c[i] = a[i] + b[i] + key;
    //
    //            }
    //            else
    //            {
    //                c[i] = a[i] + key;
    //
    //            }
    //            if (c[i] >= 2)
    //            {
    //                c[i] %= 2;
    //                key = 1;
    //            }
    //            else
    //            {
    //                key = 0;
    //            }
    //        }
    //    }
    //    return c;
    //}
    //int main()
    //{
    //    int a[10] = { 1, 0, 1, 0, 1, 1, 0, 0, 1, 1 };
    //    int    b[10] = { 1, 0, 0, 0, 1, 0, 0, 0, 0 ,1};
    //    int *c;
    //    int i, key;
    //    c = sum(a, 10, b, 9);
    //
    //    for (i = 10; i >= 0; i--)
    //    {
    //        if (c[i] != 0)
    //        {
    //            key = i;
    //            break;
    //        }
    //    }
    //    for (i = key; i >= 0; i--)
    //    {
    //        cout << c[i] << " ";
    //    }
    //    return 0;
    //}
  • 相关阅读:
    MySql的性能优化
    MySql的备份还原
    MySql的数据目录
    MySql的事务
    MySql的视图
    算法笔记_006:全源最短路径问题【动态规划法】
    算法笔记_005:堆排序问题【变治法】
    算法笔记_004:8枚硬币问题【减治法】
    算法笔记_003:矩阵相乘问题【分治法】
    使用MongoDB和JSP实现一个简单的购物车系统
  • 原文地址:https://www.cnblogs.com/pengjunwei/p/4474975.html
Copyright © 2011-2022 走看看