-
输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数。
题目描述:
-
输入:
-
输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。
当m为0时输入结束。
-
输出:
-
输出格式:每个测试用例的输出占一行,输出A+B的m进制数。
-
样例输入:
-
8 1300 48 2 1 7 0
-
样例输出:
-
2504
1000
-
-
-
-
思路:求和,用和依次除以m然后倒叙输出余数,知道和小于m。倒叙嘛可以用栈来存储余数,也可以用一个数组存完倒叙输出。
-
值得注意的是要考虑和是零的情况,还有要注意ab的大小,用long long类型来存储。
-
-
代码(数组存储)
-
#include <iostream> #include<stdio.h> using namespace std; int tr[100],idx; void exchange(int m,long long n){ idx=0; while(n!=0){ tr[idx++]=n%m; n=n/m; } int i; for(i=idx-1;i>=0;i--){ printf("%d",tr[i]); } printf("\n"); } int main() { int m; long long sum,a,b; while(scanf("%d",&m)&&m!=0){ scanf("%lld%lld",&a,&b); sum=a+b; if(sum==0)printf("0\n"); else exchange(m,sum); } return 0; }
代码(stack) -
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <stack> using namespace std; stack<int>s; void itoanthor(long long n,int m){ while(n){ s.push(n%m); n/=m; } } int main() { int m; long long a,b,re; while(scanf("%d",&m)&&m!=0){ scanf("%lld%lld",&a,&b); re=a+b; while(!s.empty())s.pop(); if(re==0) s.push(0); else itoanthor(re,m); while(!s.empty()){ printf("%d",s.top()); s.pop(); } printf("\n"); } return 0; }