该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这方面我做过以前,因为long类型最多也就18位好像,长整数肯定是超过18位吧,不然直接做四则运算就行了。超过long类型的数只能用string来存了,我的思路是:
1:先用字符串存下两个待运算的整数;
2:比较两个字符串,把较短的那个数前面用0补齐到和长的那个一样位数;
3:然后倒着把两个数的最后一位取出来,做四则运算,如果超过10的就取后一位,并把前一位存起来,记得进位就行了
4:把上面得到的数倒着拼接起来就成了。
具体代码如下:
string s1 = Console.ReadLine();
string s2 = Console.ReadLine();
//取出较短的那个数
string shortNumber = s1.Length > s2.Length ? s2 : s1;
//取出较长的那个数
string longNumber = s1.Length > s2.Length ? s1 : s2;
//将较短的那个数用0补齐到和长的一样长
string s4 = "0";
for (int i = 1; i < Math.Abs(s1.Length - s2.Length); i++)
s4 += "0";
shortNumber = s4 + shortNumber;
int carryNumber = 0;//声明进位数
string resultNumber = "";//声明结果数
for (int i = longNumber.Length - 1; i >= 0; i--)
{
//取出数一的最后一位,并转成整形用来运算
int l = Convert.ToInt32(longNumber[i]) - 48;
//取出数二的最后一位,并转成整形用来运算
int s = Convert.ToInt32(shortNumber[i]) - 48;
int t = l + s;//将末尾两位相加
//计算当前位相加的得数,并加上前一位的进位数
int curNumber = t + carryNumber;
//取出进位后剩下的余数作为结果存起来
resultNumber += curNumber > 9 ? curNumber % 10 : curNumber;
//取出当前位相加的进位数,如果没有则为0
carryNumber = curNumber > 9 ? curNumber / 10 : 0;
}
//将上面的结果倒着输出来就是正确结果了
for (int i = 0; i < resultNumber.Length; i++)
Console.Write(resultNumber[resultNumber.Length - 1 - i]);