来自厦大软件工程何大佬的作业题
图片来自何dalao
我的基本思路是判断每个数字在每一位出现几次
字丑见谅
比如输入若为1234567,
第四位将出现123*10^5+567+1次4
出现123*10^5+10^4次3及以下的数
出现123*10^5次5以上的数
核心代码如下:
1 2 3 4 5 6 7 8 9 10 |
for (int i = 1; i <= lengthn; i++) { //判断第i位 for (int j = 0; j <= 9; j++) { //判断数字j if (j == n / powten(i) % 10) count[j] = count[j] + (n / powten(i+1))*powten(i) + n % powten(i) + 1; if (j > n / powten(i) % 10) count[j] = count[j] + (n / powten(i+1))*powten(i); if (j < n / powten(i) % 10) count[j] = count[j] + (n / powten(i + 1)+1)*powten(i); } } |
因此代码默认对不满输入数字长度的位数的数在前面补0,故再输出前要将补齐的0去掉。