大整数加法(简单算法)

大整数加法首先要了解加法的算法,具体思路很简单:

从低位到高位开始加,需要进位,正向数组是高位在前,所以需要反向数组开始加法。

代码如下,写的麻烦了一点:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#define MAXD 100
int main()
{
 char str1[MAXD], str2[MAXD];
 int num1[MAXD], num2[MAXD];
 while (1) 
{
  memset(str1, 0, sizeof(str1));
  memset(str1, 0, sizeof(str2));
  memset(num1, 0, sizeof(num1));
  memset(num2, 0, sizeof(num2));//将这些数组清零
  scanf("%s", str1);//vs的输入很奇怪...
  scanf("%s", str2);
  int len1, len2, i, j;
  len1 = strlen(str1);
  len2 = strlen(str2);
  j = 0;
  int maxl = len1>len2 ? len1 : len2;
  for (i = len1 - 1; i >= 0; i--)
   num1[j++] = str1[i] - '0';//数组反向,按照加法的模式
  j = 0;
  for (i = len2 - 1; i >= 0; i--)
   num2[j++] = str2[i] - '0';
  for (i = 0; i<maxl; i++)
  {
   num2[i] += num1[i];//相加
   if (num2[i] >= 10)
   {
    num2[i] -= 10;
    num2[i + 1] += 1;//产生进位,毕竟是int数组很方便
   }
  }  
if (num2[maxl])
   printf("%d", num2[maxl]);//如果最高位是1,产生进位
  for (i = maxl - 1; i >= 0; i--)//如果想要得到一个数就用char的数组然后用atoi函数转数字
   printf("%d", num2[i]); } return 0;}

猜你喜欢

转载自blog.csdn.net/qq_41565901/article/details/81027959
今日推荐