5 条题解

  • 2
    @ 2024-12-5 0:51:34

    #include <iostream> #include <cstring> #define endl "\n" char s[10001]; using namespace std; int main() { cin>>s; int n=strlen(s); s[n-1]+=2; for(int i=n-1;i>=0;i--) { if(s[i]-'0'>=10) { s[i]-=10; //进位 s[i-1]++; } } if(s[0]=='0') cout<<"1"<<s;//排除特殊情况 例如输入8 98 输出0 00 else cout<<s; return 0; }

    • 2
      @ 2023-9-20 22:09:11
      #include<stdio.h>
      #include <string.h>
      char ai[1000];
      //初始化定义需要相加的数值
      //若输入另外相加的数需格外定义
      int a[1000],c[1000];
      //a通过ai输入每个位置上的数值
      //c为输出值
      int main()
      {
      	int la,lc;
          scanf("%s",ai);
          la=strlen(ai);//la为输入值的长度
          for(int i=0;i<la;i++)//将字符串数值转换为数组数值
          {
      		a[la-i]=ai[i]-'0';//倒序输入便于进位
      	}
      	lc=la+1;//预设位数+1
      	for(int i=1;i<=lc;i++)//计算输入的数值
      	{
              if(i==1)
      //因为另外一个数值为小于10的定值,所以只加了一次个位数
      		{c[i]+=a[i]+2;//两个数相加
              c[i+1]=c[i]/10;//判断是否进一
      		c[i]=c[i]%10;//若本位数相加大于10,0取个位数}
              else
              {
              c[i]+=a[i];
      		c[i+1]=c[i]/10;
      		c[i]=c[i]%10;}
      	    }
      	if(c[lc]==0&&lc>0)
      	lc--;//判断最大位数是否有数值
      	for(int i=lc;i>0;i--)
      //定义时倒序输入,输出时重新倒序,即正序输出
      	{
      		printf("%d",c[i]);
      	}
      	return 0;
      }
      

      仅供参考,如果感觉解释错误,可能就是错了,不要强行理解 建议去B站学高精度算法

      • 1
        @ 2025-10-1 14:13:24

        👀️

        #include<stdio.h>
        #include<string.h>
        int main()
        {
            char a[10000001];
            int l,b[10000001];
            scanf("%s",a);
            l=strlen(a);
            for(int i=0;i<l;i++){
                b[i]=a[i]-'0';
            }b[l-1]=b[l-1]+2;
            for(int k=l-1;k>0;k--){
                if(b[k]>=10){
                    b[k]%=10;
                    b[k-1]++;
                }
            }if(b[0]>=10){//单独处理最高位数
                printf("1");
                b[0]%=10;
            }
            for(int j=0;j<l;j++){
                printf("%d",b[j]);
            }
            return 0;
        }
        
        • 1
          @ 2024-12-9 20:32:03

          #include<stdio.h> #include<string.h> char s[1000006]; int a[1000006]; int main() {

          scanf("%s", s);
          int n = strlen(s);
          for (int k = 0; k < n; k++) {
          	a[k + 1] = s[k] - '0';
          }
          a[n] = a[n] + 2;
          for (int p = n; p >= 1; p--) {
          	if (a[p] >= 10) {
          		a[p] = a[p] % 10;
          		a[p - 1] ++;
          	} 
          }
          if (a[0] == 0) {
          	for (int k = 1; k <= n; k++) {
          		printf("%d", a[k]);
          	}
          }
          if (a[0] == 1) {
          	for (int k = 0; k <= n; k++) {
          		printf("%d", a[k]);
          	}
          }
          

          }

          • 0
            @ 2023-9-30 20:09:09

            #include<stdio.h> #include<string.h> int main() { char a[1000],b[1000],c[1000]; scanf("%s",a); int lo=strlen(a);// 数组长度 for (int i=0;i<lo;i++) { b[lo-i-1]=a[i]-'0'; } for (int i=0;i<lo;i++) { if(i0) { c[i]=b[i]+2;//假设输入个位为 9 则 c[0]=11 c[i+1]=c[i]/10;//c[1] 进一位 c[i]=c[i]%10;//c[0]应为 11%10=1 } else { c[i]+=b[i];//正常情况下,将 b[] 输入 c[] // 特例 当 i1时且个位进一时 c[1]此时含有进的 1 值,一般情况默认为0 c[i+1]=c[i]/10; c[i]=c[i]%10;//用作后续的进 1 } } if(c[lo]==1) { lo++; } //c[] 此时为倒序的答案,再倒序输出为正确答案 for (int i=0;i<lo;i++) { printf("%d",c[lo-i-1]); } }

            • 1

            信息

            ID
            788
            时间
            1000ms
            内存
            256MiB
            难度
            7
            标签
            递交数
            428
            已通过
            95
            上传者