❶ 用c语言编写一个程序,输入一个整数,输出0~9各数字在该整数中出现的次数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int a[10];//每个数字的计数器
int num;
int i;
char ch[100],*ch1,num1;
for(i = 0;i < 10;i++)
a[i] = 0;
printf("请输入一个整数:");
scanf("%d",&num);
itoa(num,ch,10); //将数字转化为字符串
for(ch1 = ch;ch1<ch+strlen(ch);ch1++)
{
num1 = *ch1;
switch(num1)
{
case '0': a[0]++; break;
case '1': a[1]++; break;
case '2': a[2]++; break;
case '3': a[3]++; break;
case '4': a[4]++; break;
case '5': a[5]++; break;
case '6': a[6]++; break;
case '7': a[7]++; break;
case '8': a[8]++; break;
case '9': a[9]++; break;
default:break;
}
}
printf("各数字出现的次数如下:\n");
printf("数字:0 1 2 3 4 5 6 7 8 9\n");
printf("次数:");
for(i = 0;i < 10;i++)
printf("%-3d",a[i]);
printf("\n");
return 0;
}
❷ C语言 ,如何快速统计A到B中的所有包含9 的数字 (A和B可能是很大很大的数, A<B)
容易推导1到10^n包含数字9的个数的递推公式f[n]=9*f[n-1]+10^(n-1),因为首位为9,则后面的n-1位任意,共有10^(n-1) ,而首位是0到8这9种情况,则回到1到10^(n-1)这种包含数字9的情况,所以是f[n-1],
设1到a之间一共包含数字9有s[1]个,假定a有枝辩n位数,a为a1a2...ama(m+1)..a(n),考察最后一位,如果是9,就是1个,不是9,则是0个,最后两位a(n-1)a(n),例如37,则首位为(0,1,2)的时候,就退乎谈化为1-10之间包含9的个数,总共有3*f[1],而s[n]表示最后一位数,他包含数字9的个数,
则s[n-1]=a(n-1)*f[1]+s[n];
同理s[n-2]=a(n-2)*f[2]+s[n-1];
...
逐步递推,就是
for(i=n-1;i>=1;i--)s[i]=a[i]*f[n-i]+s[i+1]; 其中f[n]=9*f[n-1]+10^(n-1);a[i]表示a的第i位数字
求出s[1]就是所求,当然还要注意高精度岁搭碰加法和减法
❸ C语言输出一个区间内所有含9的数,并从小到大排序
#include <stdio.h>
#include <math.h>
#include <malloc.h>备搭
int hasN(int num);
int main()
{
int bn,en,i;
while(1)
{
printf("请输入数字区间的起始和结束数字:"),scanf("%d%d",&bn,&en);
if(bn>en)
bn^=en,en^=bn,bn^=en;
printf("所有包含9的数字有:");
for(i=bn;i<=en;i++)
if(hasN(i))
世吵 printf("%d ",i);
printf(" ");
}
return 0;
}
int hasN(int num)
{
int flag=0;
num=abs(num);
while(num/10>0)
{
if(num%10==9)
{
flag=1;
break;
}
num=num/10;
}
if(num==9)
仿返拿 flag=1;
return flag;
}
❹ C语言 输出10到200间所有含9且只含1个9的所有数,要求定义并调用sumdight(n)函数
#include <stdio.h>
int sumdigit(int n)
{ int s=0,m;
m=n;//把n赋值给m
while(n!=0)//经过while循环后n变为0了 所以会输出0
{if(n%10==9)
s++;
n=n/10;
}
if(s==1)
printf("%d ",m);//输出m m就是那个你想要的n
return s;
}
int main()
{ int sumdigit(int );
int i;
for(i=10;i<201;i++)
sumdigit(i);
}//你的方法没问题 就这一个地方没有注意到
❺ 用C语言找出十万以内含9的数和9的倍数,并且输出,谢谢大家了
#include<stdio.h>
int main()
{
int i,j;
int cnt=0;
//freopen("C:\\a.txt","w",stdout);输出较多,可芦局以选择输出到文件
for(i=0;i<100000;i++)
{
j=i;
if(j%9==0)
{
printf("%d ",i);
cnt++;
}
else
{
while(j)
{
if(j%10==9)break;
j/虚哗稿=10;
}
if(j)
{
printf("%d ",i);
cnt++;
}
}
}
puts(""差孝);
printf("cnt=%d\n",cnt);
return 0;
}
❻ 在C语言编程中,如何实现让电脑随机输出一1~9的整数
c语言中取得伪随机数主要使用srand()和rand()这两个函数.
rand()函数会返回一个伪随机数,但是这是通过一种数学公式推算出来的,得到的随机数分布太集中,这时候要使用srand()函数来设定产生随机数的种子,一般采用当前时间作为种子,这样可以得到分布比较均匀的伪随机数。
rand(),srand()函数位于stdlib.h文件中,取得时间的time()函数位于time.h文件中。随机数测试如下:
#i
nclude
<stdio.h>
#i
nclude
<stdlib.h>
#i
nclude<time.h>
void
main()
{
int
results[10];/*用于保存随机数产生的结果*/
int
i=0;
srand((int)time(0));/*设定种子*/
for(i=0;i<10;i++)
{
results[i]=0;
}
for(i=0;i<10000;i++)
{
(results[rand()%10])++;/*取一万次随机数,使用求余运算符使得最后取得的随机数小于10*/
}
for(i=0;i<1
0;i++)
{
printf("
%d
%d
\n",i,results[i]);/*输出0-9之间的随机数出现的次数*/
}
}
经多次运行试验,产生的随机数比较均匀