高精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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #include <iostream> #include <cstdio> using namespace std; int c[100000]; int d[100000]; int e[100000]; int main() { string a, b; cin >> a >> b; if (a == "0" ) { cout << b; return 0; } if (b == "0" ) { cout << a; return 0; } for ( int i = a.length() - 1; i >= 0; i--) { c[i + 1] = a[i] - '0' ; } for ( int i = b.length() - 1; i >= 0; i--) { d[i + 1] = b[i] - '0' ; } if (a.length() >= b.length()) { for ( int i = a.length() ; i > a.length() - b.length(); i--) { if (e[i + 1] + c[i ] + d[i - a.length() + b.length() ] >= 10) { e[i + 1] += c[i ] + d[i - a.length() + b.length() ] - 10; e[i ]++; } else { e[i + 1] += c[i ] + d[i - a.length() + b.length() ]; } } for ( int i = a.length() - b.length() ; i >= 0; i--) { if (e[i + 1] + c[i ] >= 10) { e[i + 1] += c[i ] - 10; e[i ]++; } else { e[i + 1] += c[i ]; } } int num = 0; while (e[num] == 0) { num++; } for ( int i = num; i <= a.length() + 1; i++) { cout << e[i]; } } else { for ( int i = b.length() ; i > b.length() - a.length(); i--) { if (e[i + 1] + c[i - b.length() + a.length()] + d[i] >= 10) { e[i + 1] += c[i - b.length() + a.length()] + d[i] - 10; e[i ]++; } else { e[i + 1] += c[i - b.length() + a.length()] + d[i]; } } for ( int i = b.length() - a.length() ; i >= 0; i--) { if (e[i + 1] + d[i ] >= 10) { e[i + 1] += d[i ] - 10; e[i ]++; } else { e[i + 1] += d[i ]; } } int num = 0; while (e[num] == 0) { num++; } for ( int i = num; i <= b.length() + 1; i++) { cout << e[i]; } } return 0; } |
这是关于高精度加法的第一次尝试。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?