1 条题解

  • 0
    @ 2025-8-24 21:26:44

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Blue_wonders
    即使只是片刻的火花,也能在仰望黑夜的人心中留下久久不灭的美丽光芒。

    搬运于2025-08-24 21:26:43,当前版本为作者最后更新于2019-02-22 21:57:56,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题目没读懂的往这看,详细解释题目输入输出


    按照题意简单的模拟(绝对简单易懂)

    这次排坑和思路放在一起了

    样例输入: 
          1     ,      0     +      2      ,     1
    第一个数十位  第一个数个位  第二个数十位 第二个数个位
    相加变成                 0 , 0 , 0 , 0 , 3 , 1 
    (这里是每一位的进位大小)  13  11  7   5   3   2
    所以变成了               0 , 0 , 0 , 1 , 0 , 1
    输出按照从高位到低位输出   1  ,   0  ,   1
                            百位   十位   个位
    样例输出:1,0,1
    
    
    自己写的输入,并附上自己的做法:
    输入:12,1,4,6,8+26,4,7,9,5
    输出:3,6,1,3,0,1
    做法:从后往前入(从个位输入,好处是方便判断数的位数)
      位数表      十万  ,  万  ,  千  ,  百  ,  十  ,  个 
     每一位的进制   13      11      7     5      3      2
     
    1、输入第二个数 0       26      4      7      9      5
    2、加上第一个数 0       38      5     11     15     13
    3、从最小位     0       38      5     11    15+6     1
       判断是否     0       38      5    11+7     0      1
       需要进位     0       38     5+3     3      0      1
       并进位       0      38+1     1      3      0      1
       	          0+3       6      1      3      0      1
       	           3        6      1      3      0      1
    4、输出3,6,1,3,0,1 
    

    AC代码在这

    #include<bits/stdc++.h>
    using namespace std;
    string s;
    int c[7]={0,2,3,5,7,11,13};//判断每一位数进位的标准 
    int a[7];//存放每一位数的容器 
    void chack(int q){//进位函数
    	a[q+1]=a[q+1]+(a[q]/c[q]);//上一位加上这一位进的数
    	a[q]=a[q]%c[q];//这一位是进完位之后剩下的数
    	return;
    }
    int main(){
    	cin>>s;//按照字符串读入 
    	int n=s.size(),i=n-1,u=1;
    	while(i>=0){//从最后判断,从个位数加起 
    		if(s[i]>='0'&&s[i]<='9'){//如果是数字 
    			if(s[i-1]>='0'&&s[i-1]<='9'){//如果是两位数 
    				a[u]=a[u]+(s[i-1]-48)*10+(s[i]-48);//在数位上加入这个数 
    				i--;//前面的数已经被加上了,不能循环 
    			}
    			else a[u]=a[u]+s[i]-48;//是一位数,就在这个数位上加这个数 
    			u++;//加入数字后,下一个数字要在下一个数位上 
    		}
    		if(s[i]=='+')u=1;//如果是加号,那么代表这个数输完了,重新从各位开始 
    		i--;//循环下一个数 
    	}
    	for(int i=1;i<=5;i++)chack(i);//将每个数位都判断是否需要进位 
    	int t=0;//t用来标记最大位的位置 
    	for(int i=6;i>=1;i--)if(a[i]!=0){t=i;break;};//先找最大位是哪个 
    	for(int i=t;i>=2;i--)cout<<a[i]<<",";//从最大位输出,一直输出到10位,后面加‘,’ 
    	cout<<a[1];//最后输出各位后面没有‘,’ 
    	return 0;
    }
    

    感谢大家看我的题解~!

    • 1

    信息

    ID
    574
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者