杭电1002——大数相加

    xiaoxiao2025-07-29  3

    杭电1002——A + B Problem II 一、问题描述

    二、解题思路

    初看这个题目时,以为只是简单的加法,便很快就写完了,但是然而可是,,,提交上去居然错了!!!

    我便在网上找了有关这题的代码;发现这并不是一道简单的加法题,是一道大数加法,因为题目要求是1000位以内,而这早已超出了整型的长度范围,显然用整型是不可取的,所以得用数组。再看了网上的代码后,我也自己敲了这题,最后提交了数次总算对了。

    基本思路其实跟小学竖式相加类似,逢十进一。于是我用temp来存每次的进位,并参与到下一次的运算当中。还有就是两个数的长度问题:我先是将前面长度相等的部分进行加法,多出来的那一段再进行加法。最后要注意的就是格式问题啦

    三、代码部分

    #include<iostream> #include<string> using namespace std; int main() { int n;//总共n组数据 string str1,str2;//每组数据中输入的两个数(以字符串的形式输入,之后转成int类型) int sum[1001];//用来存放计算结果 int d;//计算结果的长度 int temp;//用来存取进位,并参与下一次的运算!!! int lenth1,lenth2;//两个字符串的长度 - 1,即字符串的最大数组下标 cin >> n; for(int i = 1 ;i <= n; i++) { d = 0; temp = 0; cin >> str1 >> str2; lenth1 = str1.size() - 1; lenth2 = str2.size() - 1; //将两个数含有的相同 位数进行相加 while(lenth1 >= 0 && lenth2 >= 0) { int m1 = str1[lenth1] - '0';//转为int int m2 = str2[lenth2] - '0'; sum[d++] = (temp + m1 + m2) % 10; temp = (temp + m1 + m2) / 10; lenth1--; lenth2--; } //将其中一个数多出来的位数进行加法 if(lenth1 > lenth2) { while(lenth1 >= 0) { int m = str1[lenth1] - '0'; sum[d++] = (temp + m) % 10; temp = (temp + m) / 10; lenth1--; } } else { while(lenth2 >= 0) { int m = str2[lenth2] - '0'; sum[d++] = (temp + m) % 10; temp = (temp + m) / 10; lenth2--; } } cout << "Case " << i << ":" << endl; cout << str1 << " + " << str2 << " = " ; //若最后还有进位 if(temp != 0) { cout << temp; } for(int j = d - 1; j >= 0; j--) { cout << sum[j]; } if(i < n) { cout << endl << endl; } else { cout << endl; } } }

    四、bug与调试

    前面几次提交都是WA,经过几次调试发现存在的问题都有以下这些:最前面的进位漏了;数组下标异常;最后d没减一

    后来格式错了好几次:主要是换行和空格的问题

    以下是提交列表(提交了n次总算正确了):

    转载请注明原文地址: https://ju.6miu.com/read-1301181.html
    最新回复(0)