目录
输出一个十进制位的各个数字
int a = 123;printf("%d %d %d",a/100,a/10%10,a%10);
拓展到更一般的情况,一个十进制数字的每一位应该是
$$ \frac a{10^n} %10 ,除以当前位的权重 $$如果是K进制,则应该是:
$$ \frac a{K^n} %K ,除以当前位的权重 $$变种问题:进制不统一
题目意思大致为,有一种货币,29个Knut等于1个Sickle,1个Sickle等于17个Galleon,如何将Kunt向上转化为其他单位
int a = 123;printf("%d %d %d",a/(29*17),a/17%29,a/29);
该三位数的权重分别是**29*17,29,1**,所以:
printf("%d %d %d",a/(29*17),a/29%17,a%29);
第一位不用再%29因为其上再没有别的单位
变种问题:取一个数任意连续几位
取12345678中的12,345,678
思路大致是这样的:可将原数字每三位划分,(12)(345)(678),每个括号内等同于一位,该数的进制即为1000,根据前面的原理,可以写出:
printf("%d %d %d",a/1000000,a/1000%1000,a%1000);
因此,例如下面的问题,就有了更简单的解
#include#include int main(){ int a,b; scanf("%d %d",&a,&b); int c = a + b; if(c < 0){ printf("-"); c *= -1; } if(c >= 1000000){ printf("%d,%03d,%03d",c/1000000,c/1000%1000,c%1000); }else if(c >= 1000){ printf("%d,%03d",c/1000,c % 1000); }else{ printf("%d",c); }}