《编程思维与实践》1005.平衡三进制
题目
思路
平衡三进制转十进制:
N = k n ⋅ 3 n + k n − 1 ⋅ 3 n − 1 + . . . + k 1 ⋅ 3 + k 0 N=k_n·3^n+k_{n-1}·3^{n-1}+...+k_1·3+k_0 N=kn⋅3n+kn−1⋅3n−1+...+k1⋅3+k0 , 其中 k t = − 1 , 0 , 1 k_t=-1,0,1 kt=−1,0,1
类似其他进制转十进制通过迭代便能求得;
注意到 N < 1 0 9 N<10^9 N<109,所以用int型去存储即可.
代码
#include<stdio.h>
#include<string.h>
int main()
{
int T;
scanf("%d",&T);
for(int i=0;i<T;i++)
{
char s[100];
scanf("%s",s);
int number=0;
for(int j=0;j<strlen(s);j++) //迭代
{
if(s[j]=='1')
{
number=3*number+1;
}
if(s[j]=='0')
{
number=3*number;
}
if(s[j]=='-')
{
number=3*number-1;
}
}
printf("case #%d:\n",i);
printf("%d\n",number);
}
return 0;
}