高精度加法(A+B problem)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | /*--- A+B problem 高精度 ---*/ #include<bits/stdc++.h> using namespace std; int max( int a, int b) { return a>=b?a:b; } int main( void ) { char a[505],b[505]; int numa[505],numb[505]; int lena,lenb; int sum[505]; memset (sum,0, sizeof (sum)); //数组清零!!!十分重要 memset (numa,0, sizeof (numa)); memset (numb,0, sizeof (numb)); cin>>a>>b; lena= strlen (a); lenb= strlen (b); for ( int i=0;i<=lena-1;i++){ numa[lena-1-i]=a[i]- '0' ; } //把字符转化为数字 for ( int i=0;i<=lenb-1;i++){ numb[lenb-1-i]=b[i]- '0' ; } for ( int i=0;i<=max(lena,lenb)-1;i++){ sum[i]=numa[i]+numb[i]; } for ( int i=0;i<=max(lena,lenb)-1;i++) { while (sum[i]>=10) //讨论进位问题 { sum[i]=sum[i]-10; sum[i+1]++; } } if (sum[max(lena,lenb)]>0) for ( int i=max(lena,lenb);i>=0;i--) //注意!!!最后一位有可能进位 cout<<sum[i]; else for ( int i=max(lena,lenb)-1;i>=0;i--) cout<<sum[i]; return 0; } |
高精度加法,由于数字过大,用long long也存不下,故我们需要改变思路,采用字符串进行操作。而在纸上简单的进行模拟后(这一步十分的重要!!!!一定要先模拟,不能在脑子里臆想)我们可以得知需要将数字反过来写之后才能进行计算,于是便有了上面的代码。要注意的是最后以为也有可能进位,例如99+1变为100,如果还是用max(lena,lenb)-1作为开始进行输出就只会输出00,答案错误,所以一定要考虑进位!!!。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App