怎麼計算是幾位數 (C++)

2009-04-18 11:51 pm
如題

請問各位大大

如果我輸入123

如何跑出3

(自己有寫一個程式 不過一超過10位數之後 都會自動變成7= =")

回答 (6)

2009-04-19 12:30 am
✔ 最佳答案
如果使用int的變數型別
因為輸入太多會溢位
它本身並不能儲存太多的數
所以可以用字串的形式來表達


字串表示
--------------------------------
#include <iostream>
#include<string>
using namespace std;
int main()
{
string a("\0");


cout<<"請輸入一整數:";
cin>>a;
cout<<"\n此整數是"<<a.size()<<"位數";
system("pause");
return 0;
}

--------------------------------

再來也貼上變數的表示
--------------------------------
#include <iostream>
using namespace std;
int main()
{
int a=0,count=0;
cout<<"請輸入一整數:";
cin>>a;
cout<<endl;
do
{
count+=1;
a=(int)(a/10);

}
while(a!=0);
cout<<"此整數是"<<count<<"位數";
system("pause");
return 0;
}
--------------------------------

上面兩個都能表現同樣的結果!!
只是字串比較沒有溢位的風險!!

有問題可以在發問@@
2009-04-21 7:47 am
include<iostream>
include<cmath>
using namespace std;

int main(){

double A;

cin >> A;

cout << static_cast<int>( log10(A) )+1;
// static_cast<type>(variable) 把variable轉成type型態

system("pause");
return 0;
}

這樣寫到幾百位都OK
參考: Me
2009-04-20 1:45 am
〝挑剔〞起來,這四位回答者沒一位答對!
主因在於:題目沒說明清楚!

第四位會用 %10,因為題目舉例用了 12"3"!

而幾位數?
小數算不算?

第一位回答者說明了原因,用了 19位左右法;
改成
c=0;
do
++c;
while (a/=10);
會更好

002 的方法較多,但沒有徹底解決題目不詳細的問題;
而 a=(int)(a/10);
暗示回答者有懂沒透

沒細看,就我看到的範圍,多數回答者沒處理負數的問題
而回答者 003 說
〝這是高中程度的數學 任何數字經...〞
似乎在這點上,錯得較嚴重

(有沒有差 1 的 bug ,我都沒去考慮!)

2009-04-19 17:48:23 補充:
某句寫到一半,按錯鈕! T.T

『等處』暗示回答者有懂沒透『徹』。


= = = =

寫這些不在批評,別誤會。

希望藉由這些,大家學到東西,包括:
 怎麼把問題問清楚
 怎麼回答題意不清的問題
 怎麼注意數學上的小細節

不光只是:
 怎麼學好程式

2009-04-19 19:18:47 補充:
被按錯鈕搞得漏寫一個東西:
〝可以〞說:沒有任何一個方法可以完全符答題目!

就算加了 fabs, double 也只能算出 308 位〝整數部份〞!

所以,版大會遇到的問題,
是用任何 primative type 都不可能解決的問題!
包括它的簡易變形!
2009-04-19 2:27 am
main()
{
int N=123;

printf("The last siginificant digit of %d is %d\n", N, N%10);

}
2009-04-19 2:16 am
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(int argc, char* argv[]){
//==START==//
double Number=1234567;
//這…這是高中程度的數學
//任何數字經 log 算出,然後加 1,即為此數之位數
printf("%.lf= %.lf digits.\n",Number,log10(Number)+1);
//==END==//
printf("\n"),system("PAUSE");
return 0;
}
參考: 這是數學問題……
2009-04-19 12:25 am
#include<iostream>

using namespace std;

main()
{
long long int a;/*最多就2個long 19位數了*/
int c=1;

cout << "請輸入一數:" << endl;
cin >> a;

do
{
a=a/10;
c++;
}while(a>=10);

cout << "這是" << c << "位數" << endl;
system("pause");
return 0;
}

希望有幫到你
參考: 自己打


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

檢視 Wayback Machine 備份