在 C++ 中計算一個數字的位數

Jinku Hu 2023年1月30日 2021年4月29日
  1. 使用 std::to_stringstd::string::size 函式在 C++ 中對數字中的位數進行計數
  2. C++ 中使用 std::string::erasestd::remove_if 方法對數字進行計數
在 C++ 中計算一個數字的位數

本文將演示有關如何計算 C++ 數字位數的多種方法。

使用 std::to_stringstd::string::size 函式在 C++ 中對數字中的位數進行計數

計算數字中位數的最直接方法是將其轉換為 std::string 物件,然後呼叫 std::string 的內建函式以檢索計數數字。在這種情況下,我們實現了一個單獨的模板函式 countDigits,該函式採用單個引數,該引數假定為整數型別,並以整數形式返回大小。請注意,下面的示例為負整數輸出不正確的數字,因為它也計算符號。

#include <iostream>
#include <vector>
#include <string>

using std::cout; using std::cerr;
using std::endl; using std::string;
using std::to_string;

template<typename T>
size_t countDigits(T n)
{
    string tmp;

    tmp = to_string(n);
    return tmp.size();
}

int main() {
    int num1 = 1234567;
    int num2 = -1234567;

    cout << "number of digits in " << num1 << " = " << countDigits(num1) << endl;
    cout << "number of digits in " << num2 << " = " << countDigits(num2) << endl;

    exit(EXIT_SUCCESS);
}

輸出:

number of digits in 1234567 = 7
number of digits in -1234567 = 8

為了彌補之前實現函式 countDigits 的缺陷,我們將新增一個 if 語句來評估給定數字是否為負,並返回少一的字串大小。請注意,如果數字大於 0,則返回字串大小的原始值,如以下示例程式碼中所實現的。

#include <iostream>
#include <vector>
#include <string>

using std::cout; using std::cerr;
using std::endl; using std::string;
using std::to_string;

template<typename T>
size_t countDigits(T n)
{
    string tmp;

    tmp = to_string(n);
    if (n < 0)
        return tmp.size() - 1;
    return tmp.size();
}

int main() {
    int num1 = 1234567;
    int num2 = -1234567;

    cout << "number of digits in " << num1 << " = " << countDigits(num1) << endl;
    cout << "number of digits in " << num2 << " = " << countDigits(num2) << endl;

    exit(EXIT_SUCCESS);
}

輸出:

number of digits in 1234567 = 7
number of digits in -1234567 = 7

C++ 中使用 std::string::erasestd::remove_if 方法對數字進行計數

前面的示例為上述問題提供了完全足夠的解決方案,但是可以使用 std::string::erasestd::remove_if 函式組合對 countDigits 進行過度設計,以刪除所有非數字符號。還要注意,此方法後續可用來實現可與浮點值一起使用的函式。請注意,以下示例程式碼與浮點值不相容。

#include <iostream>
#include <vector>
#include <string>

using std::cout; using std::cerr;
using std::endl; using std::string;
using std::to_string;

template<typename T>
size_t countDigits(T n)
{
    string tmp;

    tmp = to_string(n);
    tmp.erase(std::remove_if(tmp.begin(), tmp.end(), ispunct), tmp.end());
    return tmp.size();
}

int main() {
    int num1 = 1234567;
    int num2 = -1234567;

    cout << "number of digits in " << num1 << " = " << countDigits(num1) << endl;
    cout << "number of digits in " << num2 << " = " << countDigits(num2) << endl;

    exit(EXIT_SUCCESS);
}

輸出:

number of digits in 1234567 = 7
number of digits in -1234567 = 7
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相關文章 - C++ Integer