• 高精度小结/。。。


    很早就开始写高精度的加法了 今天来总结一下吧
    首先 我用的是字符数组处理的方法 先用字符数组输入 在逆序转入int型的数组 然后进位计算就好了
    需要注意的几个细节 1.记得每次循环都需要初始化


    #include<stdio.h>
    #include<string.h>
    int max(int x,int y)
    {
     if(x>y)
     return x;
     else
     return y;
    }
    int main()
    {
     char a[1010],b[1010];
     int x[1010],y[1010];
     int t,c[1010];
     int i,j,n,add,ret,get;
     int sum,casee=0;
     scanf("%d",&t);
     while(t--)
     {
      memset(x,0,sizeof(x)); //初始化
      memset(y,0,sizeof(y));
      memset(c,0,sizeof(c));
      scanf("%s %s",&a,&b);
      printf("Case %d:\n",++casee);
      j=strlen(a);
      n=0;
      for(i=j-1;i>=0;i--)
      {
       x[n++]=a[i]-'0';
      }
      j=strlen(b);
      n=0;
      for(i=j-1;i>=0;i--)
      {
       y[n++]=b[i]-'0';
      }
      add=0;
      for(i=0;i<=max(strlen(a),strlen(b))+3;i++)//逆序
      {
       sum=x[i]+y[i]+add;
       add=sum/10;
       c[i]=sum%10;
      }
      ret=0;
      for(i=0;i<=max(strlen(a),strlen(b))+3;i++)
      {
        if(c[i]!=0)
        {
                 ret=1;
                 break;
        } 
      }
      printf("%s + %s = ",&a,&b);
      if(ret==0)
      printf("0");
      else
      {
          for(i=max(strlen(a),strlen(b))+3;i>=0;i--)
          {
           if(c[i]!=0)
           {
            get=i;
            break;
           }
          }
          for(i=get;i>=0;i--)
          {
           printf("%d",c[i]);
          }
      }
      if(t!=0)
      printf("\n\n");
      else
      printf("\n");
     }
    }1002
    还有就是对于数组的中大数的计算
    关键点 怎么去处理逆序问题 (oj1297上的大神是直接把初始的值放在最后一位) 其他的思路就和普通的大数加法是一样的了
    (!! 对逆序的处理是关键 以后也要灵活处理 )  逆序是位对齐的一种方式 位对齐在大数乘法 含小数的大数加法中另有体现
    附上代码

    #include<iostream>

    #include<string.h>
    #include<stdio.h>
    using namespace std;
    int f[1005][1201];
    int main()
    {
     
     int i,j,add,sum;
     memset(f,0,sizeof(f));
     f[1][1200]=1;
     f[2][1200]=2;
     f[3][1200]=4;
     f[4][1200]=7;
     //printf("111\n");
     for(i=5;i<=1000;i++)
     {
      add=0;
      for(j=1200;j>=0;j--)
      {
       sum=f[i-1][j]+f[i-2][j]+f[i-4][j]+add;
       add=sum/10;
       f[i][j]=sum%10;
      }
     
     }
     int n;
     while(scanf("%d",&n)>0)
     {
      for(j=0;j<=1200;j++)
       if(f[n][j]!=0)
        break;
       for(;j<=1200;j++)
      printf("%d",f[n][j]);
       printf("\n");
     }
     return 0;
    }

  • 相关阅读:
    【思维导图】前端开发JavaScript-巩固你的JavaScript知识体系
    前端面试日更解答 2020-03-28
    CSS基础知识
    HTML基础知识
    Web页面制作基础
    前端面试日更解答 2020-03-24
    前端面试日更解答 2020-03-23
    前端面试日更解答 2020-03-22
    前端面试日更解答 2020-03-21
    前端面试日更解答 2020-03-20
  • 原文地址:https://www.cnblogs.com/z1141000271/p/5273195.html
Copyright © 2020-2023  润新知