灵感来源于《关于因为11+21==33被卡半小时这件事》;
代码:
#include<bits/stdc++.h>
using namespace std;
long long jin(long long x,long long n)
{
int p;
int t;
int ad;
int s;
for(int i=2;i<=9;i++)
{
s=x;
ad=1;
p=0;
while(s)
{
t=s%i;
s=s/i;
p+=t*ad;
ad*=10;
}
if(p==n)
{
cout<<i<<endl;break;
}
else p=0;
if(i==9)
cout<<-1<<endl;
}
}
int main()
{
long long a,b,n;
scanf("%lld %lld %lld",&a,&b,&n);
long long sum=a+b;
if(sum!=0&&n==0)cout<<-1<<endl;
if(sum==0&&n==0)cout<<2<<endl;
if(sum!=0&&n!=0)jin(sum,n);
return 0;
}
十进制数转为k进制数:
#include<bits/stdc++.h>
using namespace std;
char digit[] = { '0','1','2','3', '4','5', '6','7', '8','9',
'A','B','C','D', 'E' };//到所需进制用到符号
//目前最大16;
int main()
{
int init,jinzhi;
cin >> init;//初始十进制数
cin >> jinzhi;//目标进制
unsigned int tmp, tmp_init=init;
string res;//转换后的结果
while (tmp_init)
{
tmp = tmp_init % jinzhi;
tmp_init /= jinzhi;
res = digit[tmp]+res;
}
cout <<res << endl;
return 0;
}
//k小于十
#include<bits/stdc++.h>
using namespace std;
char a[10000001];
using namespace std;
int main()
{
int n,m;
int i=0,j;
cin>>n>>m;
while(n!=0)
{
a[i]=n%m+'0';
n=n/m;
i++;
}
for(j=i-1;j>=0;j--)
printf("%c",a[j]);
return 0;
}
指针操作十转十六进制:
#include<bits/stdc++.h>
using namespace std;
void zhuan(char *p,int b)
{
int j;
while(b>0)
{
j=b%16;
if(j<10)*p=j+48;
else *p=j+55;
b/=16;
p++;
}
*p='\0';
}
int main()
{
int a,i;
char s[20];
cin>>a;
zhuan(s,a);
for(int i=strlen(s)-1;i>=0;i--)
cout<<*(s+i);
return 0;
}