C++大数加法
emmm.写的有些繁琐… 我刚学,有些菜… 以后再简化些… #include #include #include using namespace std; int main() { int a; int i[1000]={0},I[1000]={0},sum[10000]={0}; char t[1000]={'0'},T[1000]={'0'}; cin>>t>>T; int l=strlen(t); int L=strlen(T); int b=0,B=0; if(l>=L) { for(a=l-1;a>=0;a--) //把**t[]**中的字符转换成 **i[]** 中的数字,并反转, { i[b]=t[a]-48; b=b+1; } for(a=L-1;a>=0;a--)//**T[]**中字符转换成**i[]**中的数字,反转 { I[B]=T[a]-48; B=B+1; } int bzhi=0; //标志,最后一位是否需要 进位 for(a=0;a { sum[a]=sum[a]+i[a]+I[a]; //相加,sum[]=sum[]+i[]+I[]中右侧右sum[], //是因为相加的时候可能有进位1 if(a==l-1&&sum[a]>9) //当加到最后一位,并且有进位 { bzhi=1; //标志一下, sum[a+1]=1; sum[a]=sum[a]%10; } if(sum[a]>9) //如果大于9,则需要进位, { sum[a+1]=1; //下一位加一 sum[a]=sum[a]%10; //取余数, } } if(bzhi==1) //如果标志了 for(a=l;a>=0;a--) //从a=l开始输出, cout< if(bzhi==0) //如果没有标志 for(a=l-1;a>=0;a--) //从a=l-1开始输出 cout< } if(l //其实我写了上边的代码后,然后粘贴复制..改了改大小写...不过样例都对... { for(a=L-1;a>=0;a--) { I[B]=T[a]-48; B=B+1; } for(a=l-1;a>=0;a--) { i[b]=t[a]-48; b=b+1; } int bzhi=0; for(a=0;a { sum[a]=sum[a]+i[a]+I[a]; if(a==L-1&&sum[a]>9) { bzhi=1; sum[a+1]=1; sum[a]=sum[a]%10; } if(sum[a]>9) { sum[a+1]=1; sum[a]=sum[a]%10; } } if(bzhi==1) for(a=L;a>=0;a--) cout< if(bzhi==0) for(a=L-1;a>=0;a--) cout< } return 0; } 思路大概就是先通过字符数组存储大数, 然后用 int数组来一个一个的转换成整型,并存储,并反转一下, 平常的加法也是从右开始向左加,个位->十位->百位->… 如果不反转,就成了 …百位->十位->个位。 然后 for(a=0;a 如果最后的一位没有进位,就 for(a=l-1;a>=0;a–) 反转输出, 如果最后的一位有进位,就for(a=l;a>=0;a–) 反转输出, (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – 使用RSpec创建gem的好教程是什
- ruby-on-rails – 如何在simple_form中将数据属性
- c# – Azure Web应用程序偶尔会抛出Cryptographi
- Cocos2dx 3.2 maybe you meant: _OBJC_CLASS_$_G
- Flash本地共享对象 SharedObject
- c# – 在LINQ to SQL返回结果集之前检查记录的存
- 解决RecyclerView 在XML文件中,不能preview
- 控制反转IOC之实现--依赖注入--依赖查找+依赖拖拽
- 使用JsonKit解析中文时注意事项
- Swift语言中某个财产的感叹号是什么?