注册 登录
编程论坛 C++教室

[求助]大数字相加问题?

bill8888 发布于 2007-06-05 22:20, 813 次点击

为了满足比较在的数学相加,我用一个数组来保存每一个无数,代码如下:

#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
using namespace std;
#define M 500

void main()
{
ifstream in("Text.txt");
if(in.fail())
{
cerr<<"Error to open file!"<<endl;
exit(1);
}
char ch[M];
in.getline(ch,M);
char ch2[M];
in.getline(ch2,M);
char ch3[M];
memset(ch3,0,M);
int m,n;
m=strlen(ch)-1;
n=strlen(ch2)-1;
for(int i=0;i<=m;i++)
ch3[i]=ch[i];
while(m>=0&&n>=0)
itoa((atoi(&ch[m])+atoi(&ch2[n--])),&ch3[m--],10);
cout<<ch<<endl<<ch2<<endl<<ch3<<endl;
system("Pause");
}


问题是:它自动的完成相加的功能,但我是用一个字符数组来存储每一个数字的,我就不太明白了,为什么它就能满足懑十就自动进位的效果,比如我的数字是:
500000000000000000000000123456
2654
结果为:500000000000000000000000126110
这怎么解释啊?
我以为的输入结果应为:
50000000000000000000005101010
5 回复
#2
起风的时候2007-06-05 22:31
要记住,字符串的每个字符在内存中都是连续的,
itoa((atoi(&ch[m])+atoi(&ch2[n--])),&ch3[m--],10);
那么你这句话中&ch[m]相当于是ch这个字符串中m位置后面的所有字符,你现在知道它为什么会进位了吧?
呵呵,重大的哦,一个学校呢。。
#3
aipb20072007-06-05 23:16
重大的真多,偶也是!
几年级的哦?
#4
谁与争疯2007-06-05 23:41
泡学妹来了。。。
#5
aipb20072007-06-06 10:33
有女的吗?怎么我看着都是男的?
#6
bill88882007-06-06 11:31
以下是引用起风的时候在2007-6-5 22:31:21的发言:
要记住,字符串的每个字符在内存中都是连续的,
itoa((atoi(&ch[m])+atoi(&ch2[n--])),&ch3[m--],10);
那么你这句话中&ch[m]相当于是ch这个字符串中m位置后面的所有字符,你现在知道它为什么会进位了吧?
呵呵,重大的哦,一个学校呢。。

明白了,谢谢了

1