#include <stdio.h>
#include <stdlib.h>
int main() {
char k[110]; // 字符串
int i = 0, len;
scanf("%s", k); // k 最多 100 位 (k - 1) * 1000 + 471
for(i = 0; k[i] != '\0'; i++);
len = i;
if(i == 1 && k[0] == '1') { // 处理K=1的特殊情况。
printf("471\n");
return 0;
}
//从最低位开始计算K-1
for(i = len-1; i >= 0; i--) {
if(k[i] == '0') { //当前位是0,需要从高位借1,算法继续循环
k[i] = '9';
}
else { //当前位已经够减1,这个1可能是借给低位的也可能是末位的时候减1
k[i] -= 1;
break; //跳出循环,K-1已经计算完毕。
}
}
// 将471之间追加到 K-1后面,就得到了(k-1)*1000+471.
k[len] = '4';
k[len+1] = '7';
k[len+2] = '1';
k[len+3] = '\0';
//打印结果
for(i=0; k[i]=='0'; i++); //跳过最前面的0.
for(; k[i] != '\0'; i++) {
printf("%c", k[i]);
}
printf("\n");
return 0;
}
[算法] 神秘数
最新推荐文章于 2022-04-03 10:10:38 发布