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

大整数加法运算,该怎么解决

2012-02-29 
大整数加法运算计算两个整数m、n的和,0 m,n 10500。输入输出格式本题只有1组输入数据,每组数据只有1行,

大整数加法运算
计算两个整数m、n的和,0 <=m,n <=10500。

输入输出格式
本题只有1组输入数据,每组数据只有1行,每组数据包含两个0到10500之间的大整数,两个整数中间用1个空格分隔。
对于每组数据,输出一行,表示两个大整数的和。

样例输入:input.txt
12345678909876543211234111222   98765432101234567891234111222

样例输出:output.txt
111111111011111111102468222444


用C语言       如何实现?

[解决办法]
是10^500

高精度计算

最主要的一个for循环大概是这样的

for (add = i= 0;i <n;i++)
{
c[i]=a[i]+b[i]+add;
add = c[i]/10;
c[i] %= 10;
}

if (add)
n++;


[解决办法]
//测试环境:DEV-c++ 实际上并不是对于任意大数都可以 只有数的
//位数不超过2147483647个就可以 实际上不会有这么大的数(有么?)
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout < < "please input two numbers:(可以输入负号,但不要输入‘+’) " < <endl;

string b,c,d;
int t=-1,p=-1,i,u;

while ( cin > > b > > c)
{
int w=b.size()-c.size();
if(w> 0)
c.insert(0,w, '0 ');
else
b.insert(0,-w, '0 ');
string a(b.size()+1, '0 ');
w=b.size();

int b1=b.find( '- ');
int c1=c.find( '- ');
if( ((b1==-1)&&(c1==-1))||((b1!=-1)&&(c1!=-1)) )
{ if((b1==-1)&&(c1==-1)) u=1;
if((b1!=-1)&&(c1!=-1)) { u=0;b[b1]= '0 '; c[c1]= '0 ';}
for (i=0;i <w;i++)
{ d=a[i];
a[i]=(b[w-1-i]+c[w-1-i]-48*3+a[i])%10+48;
a[i+1]=(b[w-1-i]+c[w-1-i]-48*3+d[0])/10+48;
}
if(u==0)cout < < "- ";
for(i=w; i> =0;i--)
cout < <a[i]; cout < < "\n ";
} //实现加法:既 两个数的符号相同

if(((b1==-1)&&(c1!=-1))||((b1!=-1)&&(c1==-1)))
{if((b1==-1)&&(c1!=-1))
{c[c1]= '0 ';
if (b <c)
{swap(b,c); t=1; }
}
if((b1!=-1)&&(c1==-1))
{b[b1]= '0 ';
if (b <c)
{swap(b,c); t=-1; }
}

for (i=0;i <w;i++)
{ u=b[w-1-i]-c[w-1-i]+48-a[i];
if (u> =0) {a[i+1]= '0 ';b[w-1-i]=u+48;}
if (u <0){a[i+1]= '1 ';b[w-1-i]=10+u+48;}
}
if(t==1) cout < < "- ";

for(i=0;i <w;i++)
cout < < b[i];cout < < "\n ";
} //实现减法:既 两个数的符号不同
}
system ( "pause " );
}

热点排行