c程式的判斷有幾個7的問題

2009-09-10 8:55 pm
我想要寫一個程式可以讀入一個整數,判斷並印出此數中有多少個數字為7。

我卡住的地方在於我只知道去判斷此數是否等於7,至於要判斷有幾個7,就難倒我了。

可以請c的前輩們給我提示 我應該怎麼做 好嗎?

順便一提我是剛剛開始自學c的 所以只會一些基本的知識 課本我也只看完前3章節 課本是用C how to program 程式設計藝術

第二章 c程式設計入門
第三章 結構化程式的開發

謝謝前輩
更新1:

請恕我愚昧 看了提示後想了老半天還是想不通 如你所說的16777216%10後可以得到6。 ok 接下來就是我的重點了,我還要知道十位數、百位數 etc 可是若我將16777216%100得到16,我該怎麼去判斷十位數是否為7呢? 再將16777216%1000得到216,該怎麼把十位數的1和個位數的6拿掉,並判斷百位數是否為7呢? 一直想不通,請恕我愚昧 謝謝

更新2:

阿 我想通了 謝謝您 我知道怎麼做了 忽然成我腦袋中閃過 謝謝您

更新3:

#include int main() {int i,j,k,many=0; printf("Input the integers:"); scanf("%d",&i); if(i % 10 == 7) many += 1; j=i % 100; j=j/10; if(j == 7) many += 1; k=i%1000; k=k/100; if(k == 7) many += 1; printf("There is %d 個7\n",many); return 0; }

更新4:

飄風哥您好,以上是小弟大概寫的一個程式,在寫的過程當中激發出問題: Q1:我的程式只能判斷user輸入3個位元,若超過3個位元則無用了,可是我在想難道我要以這種方法去擴展更多的位元嗎?我想應該不是吧?? 程式的優點應該就是可以根據一個判斷式(方程式)去完成任務吧? 若像我這樣寫程式,我感覺很死,應該有更好的方法?對吧?請再給提示 謝謝您 感恩不盡

回答 (6)

2009-09-18 2:08 am
像螞蟻一般多的書籍...XDD
真的,市面上,好多C how to program...等

2009-09-17 18:17:19 補充:
你可以利用,
第一次判斷的10,來乘於它本身,
那不就變成 16777216%(10*10) @@這樣不就可以哩?
俺舉例來說...
int CountNum ;
for( CountNum = 10 ; CountNum > 輸入數值 ; CountNum=CountNum*10){
程式內容,@@你應該就會有所領悟了吧
}

2009-09-17 18:18:23 補充:
@@ 好像打錯了 應該是 CountNum <輸入數值...XDDD 失誤
2009-09-12 1:46 am
//Headers and Macros
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cstring>
#define MaxBufferSize_Int() (int)(31*log10(2.0)+1)

using namespace std;

//封裝成一個名叫「練習」的類別
class CExercise
{
public:
CExercise()
{
this->p = (wchar_t*)calloc( MaxBufferSize_Int(), sizeof(wchar_t));
}
~CExercise()
{
free(this->p);
}
void setNumber( int Number)
{
this->Number = Number;
}
int Counter( int Digit)
{
int ret = 0;
if ( Digit > 9 || Digit < 0 )
{
return -1;
}
wchar_t wcChar[2];
_itow( Digit, wcChar, 10);
_itow( this->Number, this->p, 10);
for (int i = 0; i < (int)wcslen(this->p); i++)
{
wchar_t* pos =wcschr( this->p + i, wcChar[0]);
if ( pos != NULL )
{
i = pos - this->p;
ret ++;
}
pos = NULL;
}
return ret;
}
private:
wchar_t* p;
int Number;
};

//Main Function
void main(int argc, char** argv)
{
//==START==//
int number = 172737747;
int dig = 7, how_many;
CExercise e;
e.setNumber(number);
how_many = e.Counter(dig);
wcout<<L"Number = "<<number<<endl;
wcout<<L"Digit = "<<dig<<endl;
wcout<<L"There\'s "<<how_many<<L" "<<dig<<L"s."<<endl;
//==END==//
_wsystem(L"PAUSE");
return;
}


2009-09-11 17:49:22 補充:
「C how to program」好像是螞蟻書!
你把 wchar_t 當 char 來看就好了,佔兩個位元組,那只不過是 Unicode 而已。
參考: 封裝成一個名叫「練習」的類別!
2009-09-11 9:38 pm
#include "stdafx.h"
#include <iostream>
using namespace std;
void NUM_COUNT(int N,int NUM)
{
int NUM_COUNT= 0;
while (N)
{
if (N%10 == NUM)
NUM_COUNT++;
N=N/10;
}
cout<<NUM_COUNT;
}
int _tmain(int argc, _TCHAR* argv[])
{
NUM_COUNT(71213451,1);
cin.ignore();
return 0;
}
參考: ME
2009-09-11 1:51 pm
先計算那個數是幾位數
方法就是用/
例如199
199/10=19.......1位
19/10=1.......2位
1/10=0......3位
除到變成0,代表所有位數都被計算過了
2009-09-10 9:24 pm
_itoa
數值轉字串

用字元陣列去接的話
判斷每一個字元是否為7應該就很簡單了
2009-09-10 9:06 pm
給你提示嗎
提示就是...
假設有一個數字16777216
把每個數字分開來判斷1.6.7.7.7.2.1.6 -> 有三個 7
怎麼分開的話...
提示 : 16777216 % 10 = 6
%是取餘數..所以16777216 / 10 = 1677721....餘6
13452 % 10 = 2
3 % 2 = 1

這樣OK嗎


2009-09-11 08:11:03 補充:
******************************
你知道for()這種東西嗎..
課本前三節應該會講到吧..
沒講到的話去找一下目錄
for可以解決你的問題

2009-09-11 08:14:34 補充:
********************
對了
這裡的寫法不太好
int i,j,k,many=0;
這樣宣告的話i,j,k都不會被初始為0
建議這樣宣告
int i = 0, j = 0 , k = 0, many = 0

而且在宣告任何變數的時候建議都先把該變數初始化
例如.數字型態的就宣告為0,字元型態的就宣告為null或是'\0'..等

2009-09-12 08:03:16 補充:
螞蟻書是什麼意思阿@@?
寫得很多很雜嗎@@?
沒看過那本...


收錄日期: 2021-04-27 17:15:36
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20090910000015KK03172

檢視 Wayback Machine 備份