8 条题解

  • 3
    @ 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站学高精度算法

    • 2
      @ 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;
      }
      
      • 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; }

        • 1
          @ 2025-11-28 20:20:36
          #include <iostream>
          #include <string>
          using namespace std;
          #define int long long
          signed main() {
          	string a;
          	cin >> a;
          	int b[1000001] = {0};
          	int len = a.length();
          	int c[1000001] = {0};
          	for (int i = 0; i < len; i++) {
          		c[i] = a[i] - '0';
          	}
          	c[len - 1] += 2;
          	int ans = 0;
          	for (int i = len - 1; i >= 0; i--) {
          		if (c[i] >= 10) {
          			b[ans] = c[i] - 10;
          			ans++;
          			if (i == 0) {
          				b[ans] = 1;
          				ans++;
          			} else {
          				c[i - 1]++;
          			}
          		} else {
          			b[ans] = c[i];
          			ans++;
          		}
          	}
          	for (int i = ans - 1; i >= 0; i--) {
          		cout << b[i];
          	}
          	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
              @ 2025-11-26 19:59:46
              #include<stdio.h>
              #include<string.h>
              int main()
              {
                  char a[1000002]; 
                  int length;
                  scanf("%s", a);
                  length = strlen(a);
                  a[length-1] += 2;
                  for(int i = length-1; i > 0; i--) {
                      if(a[i] > '9') {
                          a[i] -= 10;        
                          a[i-1] += 1;       
                      }
                  }
                  if(a[0] > '9') {
                      a[0] -= 10;
                      printf("1");
                  }
                  printf("%s", a);
                  return 0;
              }//👀️ 
              
              • 0
                @ 2025-11-14 20:26:11
                #include <stdio.h>
                #include <string.h>
                int main() {
                    char num[1000001]; 
                    scanf("%s", num);  
                    int len = strlen(num);
                    int carry = 2;  
                    for (int i = len - 1; i >= 0 && carry > 0; i--) {
                        int digit = num[i] - '0'; 
                        digit += carry;          
                        carry = digit / 10;  //如果进位大于0则继续循环          
                        digit %= 10;              
                        num[i] = digit + '0';     
                    }
                    if (carry > 0)  printf("1%s", num); 
                    else printf("%s", num);
                    return 0;
                }
                
                • 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
                  标签
                  递交数
                  535
                  已通过
                  127
                  上传者