这是一类简单的问题。
1.对于不超过int的数,可以直接读入整数,通过不断求模再除以10的形式获得每一个数位,将它们存在数组里。
2.对于超过int的数,考虑以字符串形式读入,然后依次处理每一位,将它们存在数组里面。需要注意的是,以字符串读入的时候,字符串的高位存储的是数的低位。
数值转换
题目描述
求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。
输入
输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。
数据可能存在包含前导零的情况。
输出
可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。
样例输入
15 Aab3 7
样例输出
210306
//数制转换
//15 Aab3 7
//210306
#include<iostream>
using namespace std;
int main(void)
{
int m;int n;//原进制和待转换进制
while(cin>>m>>n)
{
string str;
cin>>str;
long long int num=0;
for(int i=0;i<str.length();i++)
{
int temp;
if(str[i]>='0'&&str[i]<='9') temp=str[i]-'0';
else if(str[i]>='A'&&str[i]<='Z') temp=str[i]-'A'+10;
else if(str[i]>='a'&&str[i]<='z') temp=str[i]-'a'+10;
num=num*m+temp;
}//转换成10进制
char ans[100];
int count=0;
do{
int bit = num % n ;
if(bit>=0&&bit<=9) ans[count]='0'+bit;
else if(bit>=10&&bit<=36) ans[count]='A'+bit-10;
num = num /n ;
count++;
}while(num);//转换为n进制
for(int i=0;i<count;i++) cout<<ans[count-i-1];
cout<<endl;
}
return 0;
}
特殊乘法
题目描述
写个算法,对2个小于1000000000的输入,求结果。
特殊乘法举例:123 * 45 = 1*4 +1*5 +2*4 +2*5 +3*4+3*5
输入
两个小于1000000000的数
输出
输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。
样例输入
123 45
样例输出
54
//特殊乘法
#include<iostream>
using namespace std;
int main(void)
{
int a,b;
while(cin>>a>>b)
{
int buf1[20],buf2[20];
int size1=0;int size2=0;
while(a!=0)
{
buf1[size1++]=a%10;
a/=10;
}
while(b!=0)
{
buf2[size2++]=b%10;
b/=10;
}
int ans = 0;
for(int i=0;i<size1;i++){
for(int j=0;j<size2;j++){
ans+=buf1[i]*buf2[j];
}
}
cout<<ans<<endl;
}
return 0;
}