【问题标题】:How do i determine the first digit of a number without knowing the number of digits?c++如何在不知道位数的情况下确定数字的第一位? c++
【发布时间】:2016-05-28 12:25:24
【问题描述】:

例如,42556。如果我不知道数字中的位数,如何确定第一个数字?我无论如何都找不到适合我的算法! (我的意思是确定42556中的4)

【问题讨论】:

  • @MikeDunlavey 我认为这就是我确定最后一个数字(6)的方式
  • @MikeDunlavey 这不是给你最后一个数字吗,在这种情况下是 6?
  • last 在标题中,first 在问题中 = 即时投票。
  • 我知道你现在有了答案。但是,如果我不知道这种方式,我会转换为字符串并提取第一个字符。但我意识到与答案相比,这并不是很好。 ??????

标签: c++ algorithm numbers codeblocks digits


【解决方案1】:

假设a是输入数字。

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    long a = 42556;
    long num;
    num=floor(log10(a))+1; 
    //cout<<num<<" "<<"\n";  //prints the number of digits in the number

    cout<<a/(int)pow(10,num-1)<<"\n"; //prints the first digit
    cout<<a%10<<"\n";                 //prints the last digit

    return 0;
}

现场演示here

【讨论】:

  • 感谢大家回答我的问题!
  • 我看到你回答了很多关于堆栈溢出的问题
  • 除非您取消注释掉注释行,否则 +1、-1 操作是不必要的
【解决方案2】:

反复除以 10,直到结果小于 10。

num = 42556
while num > 9
    num = num / 10

【讨论】:

  • 假设数字在base10
【解决方案3】:

您可以继续将其除以 10,直到达到最后一位数:

int lastDigit(int n) {
    n = abs(n); // Handle negative numbers
    int ret = n;
    while (n > 0) {
        ret = n % 10;
        n /= 10;
    }
    return ret;
}

【讨论】:

    【解决方案4】:

    所有答案都假设您有一个整数。但一般来说,你可以先使用&lt;cmath&gt;中的函数floor得到整数形式,即

    #include <cmath>
    int getlastdigit(double number)
    {
        long long n = (long long)floor(number);
        while(n > 9)
            n /= 10;
        return n;
    }
    

    【讨论】:

      【解决方案5】:

      试试这个:

      int firstdigit(int n) {
                 int x = n;
                while(n != 0) {
                   x = n%10;
                   n = n/10;
      
                }
               return x;
          }
      

      【讨论】:

      • @DragosStamatin :有一个更好的方法来感谢堆栈溢出。您可以投票/接受答案
      • @drescherjm:感谢您指出这一点。这是我犯的一个愚蠢的错误
      • (这仍然会为参数 n=0 返回一个未初始化的值。)
      • @greybeard,您能详细说明一下吗?对于n=0x 的值将是0,然后返回。
      猜你喜欢
      • 2020-08-10
      • 2016-02-16
      • 1970-01-01
      • 2021-06-23
      • 2021-12-20
      • 2019-01-22
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多