33,025
社区成员




#include <stdio.h>
#include <stdlib.h>
void statNum(int sn[10], int n)
{
int i, c, k =0, pown=1, s=0;
printf("n = %d\n", n);
for(int i = 0; i < 10; i++)
sn[i] = 0;
while(n > 0)
{
c = n%10;
// 统计从个位算起前k位 0 ~ 9 个数
for(i=0; i < 10; i++)
sn[i] += c*k*pown/10;
// 如果k+1位为0,去掉第k+1位补 0 个数
if(c==0) sn[0] -= pown;
// 统计第k+1位出现 1 ~ (c-1) 个数
for(i=1; i < c; i++)
sn[i] += pown;
// 统计第k+1位出现 c 个数
sn[c] += 1 + s;
s += c*pown;
n /= 10;
pown *= 10;
k++;
}
}
void main(int argc , char *argv[])
{
int sn[10], i, n=2030;
if(argc > 1)
n = atoi(argv[1]);
statNum(sn, n);
for(i=0; i < 10; i++)
printf("%d: %d\n", i,sn[i]);
}
#include <stdio.h>
#include <stdlib.h>
void statNum(int sn[10], int n)
{
int i, c, k, s, pown;
for(int i = 0; i < 10; i++)
sn[i] = 0;
for(k=s=0, pown=1; n > 0; k++, n /=10, pown *=10)
{
c = n%10;
//先补0
//统计从个位算起前k位 0 ~ 9 个数
for(i=0; i < 10; i++)
sn[i] += c*k*pown/10;
// 统计第k+1位出现 0 ~ (c-1) 个数
for(i=0; i < c; i++)
sn[i] += pown;
// 统计第k+1位出现 c 个数
sn[c] += 1 + s;
// 去掉第k+1位补 0 个数
sn[0] -= pown;
s += c*pown;
}
}
void main(int argc , char *argv[])
{
int sn[10], i, n=2030;
if(argc > 1)
n = atoi(argv[1]);
printf("n = %d\n", n);
statNum(sn, n);
for(i=0; i < 10; i++)
printf("%d: %d\n", i,sn[i]);
}
#include <stdio.h>
#include <stdlib.h>
void statNum(int sn[10], int n)
{
int i, c, k, s, pown;
for(int i = 0; i < 10; i++)
sn[i] = 0;
for(k=s=0, pown=1; n > 0; k++, n /=10, pown *=10)
{
c = n%10;
// 统计从个位算起前k位 0 ~ 9 个数
for(i=0; i < 10; i++)
sn[i] += c*k*pown/10;
// 先补0统计第k+1位出现 0 ~ (c-1) 个数
for(i=0; i < c; i++)
sn[i] += pown;
// 去掉第k+1位补 0 个数
sn[0] -= pown;
// 统计第k+1位出现 c 个数
sn[c] += 1 + s;
s += c*pown;
}
}
void main(int argc , char *argv[])
{
int sn[10], i, n=2030;
if(argc > 1)
n = atoi(argv[1]);
printf("n = %d\n", n);
statNum(sn, n);
for(i=0; i < 10; i++)
printf("%d: %d\n", i,sn[i]);
}