❶ 用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之間的隨機數出現的次數*/
}
}
經多次運行試驗,產生的隨機數比較均勻