最简单的一个网站开发,百度浏览器官方网站,关于网站建设费用的报告,seo网站推广收费题目#xff1a;假设输入是2个数字#xff0c;可能超过long long类型能表示的范围#xff0c;请输出两数相加的运算结果。 思路#xff1a;2个数输入的时候#xff0c;肯定都是用string存的#xff0c;先将短的数在末尾补0#xff0c;使得二者一样长。然后挨个位相加假设输入是2个数字可能超过long long类型能表示的范围请输出两数相加的运算结果。 思路2个数输入的时候肯定都是用string存的先将短的数在末尾补0使得二者一样长。然后挨个位相加并设置一个标志位专门用来存溢出(即进位)情况。 代码如下
#include stdio.h
#include stringusing namespace std;static void compasent0(std::string inputStr1, std::string inputStr2)
{if (inputStr1.size() inputStr2.size()){int diff inputStr2.size() - inputStr1.size();string prefix(diff, 0);inputStr1 prefix inputStr1;}else{{int diff inputStr1.size() - inputStr2.size();string prefix(diff, 0);inputStr2 prefix inputStr2;}}
}static bool checkStrValid(const std::string inputStr)
{for(const char ch : inputStr){if ((ch 0) || (ch 9)){return false;}}return true;
}static std::string BigNumAdd(std::string inputStr1, std::string inputStr2)
{if (!checkStrValid(inputStr1) || !checkStrValid(inputStr2)){printf(ERROR, invalid input!\n);return ERROR;}compasent0(inputStr1, inputStr2);printf(line[%u], inputStr1[%s], inputStr2[%s]\n, __LINE__, inputStr1.c_str(), inputStr2.c_str());std::string out(inputStr1.size(), 0);int tempSum 0;int overflow 0;for (int i inputStr1.size() - 1; i -1; --i){tempSum (int)(inputStr1[i] - 0) (int)(inputStr2[i] - 0) overflow;if (tempSum 10){out[i] (char)(tempSum 0);overflow 0;}else{out[i] (char)(tempSum % 10 0);overflow 1;}}if (overflow){out to_string(overflow) out;}return out;
}int main()
{std::string inputStr1 1906;std::string inputStr2 456;std::string outputStr BigNumAdd(inputStr1, inputStr2);printf(outputStr[%s]\n, outputStr.c_str());inputStr1 99999999999999999999;inputStr2 1;outputStr BigNumAdd(inputStr1, inputStr2);printf(outputStr[%s]\n, outputStr.c_str());return 0;
}输出是
./a.out
line[45], inputStr1[1906], inputStr2[0456]
outputStr[2362]
line[45], inputStr1[99999999999999999999], inputStr2[00000000000000000001]
outputStr[100000000000000000000]