1001 A+B Format

文章讲述了作者如何从一个基本的整数加法程序改进到使用C++的`to_string`函数将结果转换为字符串,并优化代码结构,包括处理负号、添加逗号和倒序操作,以提高代码的可读性和效率。
摘要由CSDN通过智能技术生成

我的解法

#include<iostream>
#include<string>
using namespace std ;
int main(){
    int a,b,c,d;
    cin>>a>>b;
    int n=0;
    c=a+b; 
    if(c<0){       //先解决输出负号的问题
        c=-c;
        cout<<"-";
    }
    
    d=c; 
    if(d == 0) cout<<d;  //这个是有一个检验点一直不通过,我才发现我没有考虑a+b=0的情况
    while(d != 0){   //这是为了计算a+b的位数      
        d=d/10;
        n++;        
    }
   
    int s[30];
    for(int i = 0; i < n; i++){  //把a+b的每一位都存到数组里,个位在数组的最前端存着
        s[i] = c%10;                
        c=c/10;                     
    }                                                                
    for(int i = n-1; i >= 0;i--){  //逆序输出
        cout<<s[i];
        if(i%3 == 0 && i != 0){   //隔三位输出一个逗号
            cout<<",";
        }
    }
return 0;
}

感觉我写的很杂很low不专业,一点也不优美,丢三落四的 

当时写的时候特别想直接把int型转换为string型,上网搜了一个好像是什么to_string的用法,但是之前没见过,所以也没用。

学习一下优美一些的解法

#include <iostream>
using namespace std;
int main() {
    int a, b;
    cin >> a >> b; //输入a和b
    string s = to_string(a + b); //将a+b的值转换为字符串
    if(s[0] == '-') { //处理符号
        cout << '-';
        s.erase(0, 1);
    }
    int count = 0; //用于记录当前位置
    for(int i = s.length() - 1; i >= 0; i--){ //添加逗号
        count++;
        if(count % 3 == 0 && i > 0){
            s.insert(i, ",");
        }
    }
    cout << s;
}

上面的代码用了一些库函数,我不是特别习惯这样,当然这样可以省很多事了。

学习的点

1.string s = to_string(a + b); //将a+b的值转换为字符串

2.s.erase(pos,n) //删除字符串s中从第pos位开始的n个字符

3.s.insert(pos,"w") //在第pos位中添加字符串w,w不止一位的话则顺延后面的位置

4.倒序循环,巧用count++从后向前每三位加一个逗号,然后再正序输出。

讨论的点

1.可以先判断要不要输出负号,再to_string(和的绝对值)。

2.我是倒序载入原始数据,然后再倒序输出,边输出边加逗号,这么看也挺巧妙的!

即:从数据的最后一位开始标号,标为0,由低位到高位标号依次增大(和优美解法中count的作用异曲同工),则标号为3的倍数的位之后要加逗号。

综合一下,写个我喜欢的解法

我觉得很符合常人的脑回路...

#include<iostream>
#include<string>
using namespace std;
int main(){
	int a,b,c;
	cin>>a>>b;
	c=a+b;
	if(c < 0){
		cout<<"-";
		c=-c;
	}
	string s =to_string(c);//int->string
	
	char w[30];int j=0;
	for(int i=s.length()-1;i>=0;i--,j++){//倒序载入 
		w[j]=s[i];
	}
	for(int i=s.length()-1;i>=0;i--){ //倒序输出 
		cout<<w[i];
		if(i%3 == 0 && i != 0){
			cout<<",";
		}
	}
		
return 0;
}
写完啦写完啦!
  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值