题解 | #又一版 A+B#

又一版 A+B

https://www.nowcoder.com/practice/9255c05d45b8406c9b588d7c57aa920b

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stack>
#include <map>
using namespace std;

string add(string s1, string s2){
	string res = "";
	while(s1.size() > s2.size()){ //长度补齐 
		s2 = "0" + s2;
	}
	while(s1.size() < s2.size()){
		s1 = "0" + s1;
	}
	int cur;
	int carry = 0;
	for(int i = s1.size() - 1; i >= 0; i--){
		cur = carry + s1[i] - '0' + s2[i] - '0'; //当前这个位的和
		carry = cur / 10; //进位 
		cur %= 10;
		char c = cur + '0';
		res.insert(0, 1, c); //插入到结果的第一位 
	}
	if(carry != 0){ //计算完之后如果还有进位 
		char c = carry + '0';
		res.insert(0, 1, c);
	}
	return res;
}

int divide(string &a, int x){ //字符串除法 
	int remainder = 0; //上一轮剩下的
	for(int i = 0; i < a.size(); i++){ //从第一位除到最后一位 
		int cur = a[i] - '0'; //当前i位置的数值 
		remainder = remainder * 10 + cur;
		a[i] = remainder / x + '0';
		remainder %= x; 
	}
	int index = 0;
	while(a[index] == '0'){ //找到第一个不是0的位置 
		index++;
	}
	a = a.substr(index); //截取 
	return remainder; //把最后的余数返回回去 
}

int main() {
    stack<int> mystack;
    int m;
    while (scanf("%d", &m) != EOF) { //这里要写成 != EOF 不能写成 != 0 我也不知道为啥。。。
    	if(m == 0){
    		break;
		}		
    	string a, b;
    	cin >> a >> b;
    	a = add(a, b);
    	while(a.size() > 0){
    		int t = divide(a, m);
    		mystack.push(t);
		}
        while (!mystack.empty()) {
            int t = mystack.top();
            mystack.pop();
            printf("%d", t);
        }
        printf("\n");
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 16:22
点赞 评论 收藏
分享
找个工作&nbsp;学历是要卡的&nbsp;要求是高的&nbsp;技能不足是真的&nbsp;实习经验是0的&nbsp;简历无处可写是事实的&nbsp;钱不好赚是真的&nbsp;想躺平又不敢躺&nbsp;也不甘心躺&nbsp;怕自己的灵感和才华被掩埋甚至从未被自己发现&nbsp;又质疑自己是否真正有才华
码农索隆:你现在啊,你心里都明白咋回事,但是你没办法改变现状,一想到未来,你又没有信心狠下心来在当下努力。 得走出这种状态,不能一直困在那里面,哪不行就去提升哪,你一动不动那指定改变不了未来,动起来,积少成多才能越来越好
点赞 评论 收藏
分享
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务