目录
1.D进制的A+B
#include <cstdio>
#include <cstring>
#include <math.h>
#include <algorithm>
using namespace std;
int main(){
int a,b,d;
int sum;
int martix[40]={0};
while(scanf("%d %d %d",&a,&b,&d)!=EOF){
sum = a + b; //算出总和
int num=0; //计算次数
do{
martix[num++] = sum%d;
sum = sum / d;
printf("%d\n",sum);
}while(sum!=0);
for(int i=num-1;i>=0;i--){ //将数组逆序输出
printf("%d",martix[i]);
}
}
return 0;
}
2.又一版 A+B
这一题要用long long
#include <cstdio>
#include <cstring>
#include <math.h>
#include <algorithm>
using namespace std;
int main(){
int d;
long long sum,a,b;
int martix[40]={0};
while(scanf("%d",&d)!=EOF){
if(d==0){
break;
}
scanf("%lld %lld",&a,&b);
sum = a + b; //算出总和
int num=0; //计算次数
do{
martix[num++] = sum%d;
sum = sum / d;
}while(sum!=0);
for(int i=num-1;i>=0;i--){ //将数组逆序输出
printf("%d",martix[i]);
}
printf("\n");
memset(martix,0,sizeof(martix));
}
return 0;
}
3.数制转换
这一个略有点麻烦
因为十六进制会牵扯到字母,输入时要考虑字母的情况,输出时也要考虑的字母的情况
对于一个数字,如果要转换成字母abc,则加上55,如果是变成字符类的自己,加上48或者‘0’都行
void int_to_string(char final[],int x,int num){
if(x>=10&&x<=15){
final[num]=x+55;
}else{
final[num]=x+48;
final[num]=x+'0';
}
}
#include <cstdio>
#include <cstring>
#include <math.h>
#include <algorithm>
using namespace std;
int other_to_ten(int a, int n){
int sum = 0;
int product = 1;
int factor;
while(n!=0){
factor = n % 10;
sum+=factor*product;
product*=a;
n=n/10;
}
return sum;
}
void ten_to_other(int value,int system){
int martix[100]={0};
int y;
int num=0;
do{
y = value%system;
martix[num++] = y;
value/=system;
}while(value!=0);
for(int i=num-1;i>=0;i--){
printf("%d\n",martix[i]);
}
}
int string_to_int(char n[]){
int length = strlen(n);
for(int i=0;i<length;i++){
if(n[i]>='0'&&n[i]<='9'){
n[i] -= '0';
}else if(n[i]>='a'&&n[i]<='f'){
n[i] -= 87;
}else if(n[i]>='A'&&n[i]<='F'){
n[i] -= 55;
}
}
return length;
}
void int_to_string(char final[],int x,int num){
if(x>=10&&x<=15){
final[num]=x+55;
}else{
final[num]=x+48;
}
}
int main(){
int a,b;
char n[100];
while(scanf("%d %s %d",&a,n,&b)!=EOF){
int length = string_to_int(n);
int sum=0;
long long product =1 ;
for(int i=length-1;i>=0;i--){
sum+=product*((int)(n[i]));
product*=a;
}
int num=0;
char final[100];
do{
int_to_string(final,sum%b,num++);
sum/=b;
}while(sum!=0);
for(int i = num-1;i>=0;i--){
printf("%c",final[i]);
}
printf("\n");
memset(n,'\0',sizeof(n));
memset(final,'\0',sizeof(final));
}
return 0;
}
4.进制转换
很离谱的一题,一开始是思路不对,后面发现不知道是什么原因的bug,明天再看了
#include <cstdio>
#include <cstring>
#include <math.h>
#include <algorithm>
using namespace std;
int main(){
char inputs[32];
while(scanf("%s",inputs)!=EOF){
int length = strlen(inputs);
int num[32];
for(int i=0;i<length;i++){
num[i] = inputs[i] - '0';
}
int ans[100];
int i=0;
int sum=1;
int t;
while(sum)
{
sum=0;
for(int j=0; j<length; j++)
{
t=num[j]/2;
sum+=t;
if(j==length-1)
ans[i++]=num[j]%2;
else
num[j+1]+=(num[j]%2)*10;
num[j]=t;
}
}
for(int j=i-1;j>=0;j--){
printf("%d",ans[j]);
}
printf("\n");
}
return 0;
}