Codeforces Beta Round #46 (Div. 2)——B

来源:互联网 发布:mac nvm 安装nodejs 编辑:程序博客网 时间:2024/05/20 11:46
B. Sum
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Vasya studies positional numeral systems. Unfortunately, he often forgets to write the base of notation in which the expression is written. Once he saw a note in his notebook saying a + b = ?, and that the base of the positional notation wasn’t written anywhere. Now Vasya has to choose a base p and regard the expression as written in the base p positional notation. Vasya understood that he can get different results with different bases, and some bases are even invalid. For example, expression 78 + 87 in the base 16 positional notation is equal to FF16, in the base 15 positional notation it is equal to 11015, in the base 10 one — to 16510, in the base 9 one — to 1769, and in the base 8 or lesser-based positional notations the expression is invalid as all the numbers should be strictly less than the positional notation base. Vasya got interested in what is the length of the longest possible expression value. Help him to find this length.

The length of a number should be understood as the number of numeric characters in it. For example, the length of the longest answer for 78 + 87 = ? is 3. It is calculated like that in the base 15 (11015), base 10 (16510), base 9 (1769) positional notations, for example, and in some other ones.

Input

The first letter contains two space-separated numbers a and b (1 ≤ a, b ≤ 1000) which represent the given summands.

Output

Print a single number — the length of the longest answer.

题意

求两个数和的最大长度。

思路:

找到每个数中最大的一个数字,比较大小,则所得数字加1之后的结果即是使结果(注意和为该进制下的和)最长的基数。

#include <cstdio>#include <algorithm>#include <iostream>#include <cmath>#define maxn 200using namespace std;int getmaxnum(int x)//找一个数字中最大数位{    int max=0;    while(x)    {        int s=x%10;        if(s>max) max=s;        x/=10;    }    return max;}int change(int x,int base)//10进制转base进制{    int s=0,p=1;    while(x)    {        s+=x%10*p;        x/=10;        p*=base;    }    return s;}int main(){    int a,b;    cin>>a>>b;    int base=max(getmaxnum(a),getmaxnum(b))+1;//求基数    int sum=change(a,base)+change(b,base);//在base进制下两数相加,求十进制结果    int j=0;    while(sum)//求其位数    {        int s=sum%base;        sum/=base;        j++;    }    cout<<j<<endl;    return 0;}


原创粉丝点击