首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++ 字符数字转化有关问题!

2012-06-02 
c++ 字符数字转化问题!!急急急啊。。。把两个整数字符串相加,每位字符按地位到高位相加的时,结果大于‘9’时怎

c++ 字符数字转化问题!!
急急急啊。。。把两个整数字符串相加,每位字符按地位到高位相加的时,结果大于‘9’时怎么办啊啊。比如s1="12387462378319874394749" ,s2="378461897647384963",按位相加的时候,比如s1[10]+s2[10],我想把结果保存到s1,两个字符相加的结果是什么?大于9又怎么办?谢谢各位大神们了!!

[解决办法]
两个大整数字符串相加,从两个字符串的最高位开始相加,先将它们的最高位字符转化为整数进行相加,用一个临时变量保存相加结果的进位,
比如:s1="12387462378319874394749" ,s2="378461897647384963";s1的最高位是9,s2的最高位是3,将它们相加。

C/C++ code
s1[]="12387462378319874394749",s2[]="378461897647384963";int len1 = strlen(s1),len2 = strlen(s2);int carry = 0,temp;char ch;temp = (s1[len1 - 1] - '0') + (s2[len2 - 1] - '0') + carry;//将两个字符变成整数,然后相加,carry是进位,其初值是0ch = temp % 10 + '0';//相加后的结果对10求余,再加0字符就变成相应的数字字符了carry = temp / 10;//carry保存相加结果后的进位,如果没进位就是0s1[len1 - 1] = ch;//将结果存到s1中,再进行倒数第二位字符的相加,一直循环下去,直到第0个字符,就是2个大整数字符串相加了
[解决办法]
下面是两个大整数字符串相加的代码,不过结果没有保存到s1中,而是另外开辟了一段空间,如果想保存到S1中,就必须确保s1有足够大的空间,再将结果复制到s1中。
C/C++ code
#include <iostream>using std::endl;using std::cout;using std::cin;int main(){const int size = 50;    char s1[size],s2[size];    cout << "please input first  s1:";    cin >> s1;    cout << "please input second s2:";    cin >> s2;    int rsize = (strlen(s1) >= strlen(s2) ?strlen(s1):strlen(s2)) + 2;    char *result = new char[rsize];    memset(result,'0',rsize);    result[rsize - 1] = '\0';    int k = 0,temp = 0,i,j,m = rsize -2;    for(i = strlen(s1) - 1,j = strlen(s2)  - 1;i >= 0 && j >= 0; --i,--j)    {        temp = (s1[i] - '0') + (s2[j] - '0') + k;        result[m--] = temp % 10 + '0';        k = temp/10;    }    if(i < 0 && j >= 0)    {        while(j >= 0)        {            temp = s2[j--] - '0' + k;            result[m--] = temp % 10 + '0';            k = temp/10;        }    }    else if(i >=0 && j < 0)    {        while(i >= 0)        {            temp = s1[i--] - '0' + k;            result[m--] = temp % 10 + '0';            k = temp / 10;        }    }            result[m] = k + '0';            cout << "             sum:";            if(result[0] == '0')                cout << result + 1 << endl;            else                cout << result << endl;            delete []result;return 0;} 

热点排行