我試圖讓用戶輸入整數(正數或負數)并讓他們選擇一個數字位置并輸出該位置的數字。
int findDigAtPos(int number)
{
int position;
int result;
cout << "Enter digit position between 1 and " << std::to_string(number).length() << endl;
cin >> position;
while (position < 0 || position > std::to_string(number).length())
{
cout << "Enter digit position between 1 and "<< std::to_string(number).length()<<endl;
cin >> position;
}
if (std::to_string(number).length() == 1)
cout << "Only one digit" << endl;
number = number / pow(10, (position - 1.0));
result = number % 10;
return result;
}
這是我目前擁有的功能代碼。但是,它會反向輸出數字。如何糾正數字位置?我認為它甚至無法正常運行,直到注意到它的順序相反。
uj5u.com熱心網友回復:
pow首先,請注意,在處理整數時不應該使用該函式,因為它會回傳double結果,這可能會由于意外截斷結果而導致問題。
但是,如果您堅持使用它,那么您需要記住,除以 10 的冪會隨著數字位置的增加而減小:即,位置是在位置 1 中以最左邊(最重要的)數字給出的。因此, 10 的冪將是總位數減去位置:
number = number / pow(10, (std::to_string(number).length() - position));
result = number % 10;
更安全的方法(不使用pow)將是一個小回圈,如下所示:
for (int d = std::to_string(number).length() - position; d > 0; --d) number /= 10;
result = number % 10;
但是,由于您已經將傳遞的數字轉換為字串,那么為什么不保存該字串并從中提取數字 - at position-1,因為 C 中的陣列(和字串)索引是從零開始的:
int findDigAtPos(int number)
{
int position;
std::string str = std::to_string(std::abs(number)); // If -ve, remove sign!
int ndig = str.length();
std::cout << "Enter digit position between 1 and " << ndig << "\n";
std::cin >> position;
while (position < 0 || position > ndig) {
std::cout << "Enter digit position between 1 and " << ndig << "\n";
std::cin >> position;
}
return str.at(position-1) - '0';
}
0請注意,C 9標準保證數字的代碼(ASCII 或其他)是連續且有序的,因此減去數字的值0會將任何數字“轉換”為其實際的數值。
uj5u.com熱心網友回復:
而不是這個:
number = number / pow(10, (position - 1.0));
result = number % 10;
這個:
int length = (int)(std::to_string(number).length());
while (position < length)
{
number = number / 10;
length--;
}
result = number % 10;
以上應該適用于正數。對于負數,您可能需要進行修正。我將把它作為練習留給你管理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/523705.html
標籤:C 功能
上一篇:Excel中的工資計算
下一篇:生成按鈕只生成一次,之后卡住
