【问题标题】:Converting array to number in (Mikro) C将数组转换为数字(Mikroc
【发布时间】:2016-10-26 07:31:00
【问题描述】:

我遇到了一些编码问题。

我正在将串行输入读取到我的程序中,并将数字保存到一个数组中。

现在我想将此数组转换为整数进行计算,其中数组索引 0 表示一位数,索引 1 表示十位等。

Array[0] represents 1 digit
Array[1] represents 10 digit
Array[2] represents 100 digit
Array[3] represents 1000 digit
Array[4] represents 10000 digit
Array[5] represents 100000 digit

数组是动态的,所以只能有 2 个索引。

【问题讨论】:

    标签: c arrays type-conversion mikroc


    【解决方案1】:

    使用循环。您必须知道数字的长度或数组的长度。数组中未使用的位置应该是0

    int i;
    long result = 0; // Choose a suitable integer type. 
    for (i = length; i <= 0; --i) {
        result = result * 10 + Array[i];
    }
    

    【讨论】:

    • 与我在下面提出的解决方案相比,这实际上是一个非常优雅的解决方案。为此 +1 :)
    【解决方案2】:

    如果所有数组条目都是0-9,并且它们的数据类型可以在不进行强制转换的情况下转换为int,那么这可能对您有用:

    #include <stdio.h>
    
    int main (void) {
    
    int lenght = 6;
    int Array[lenght];
    Array[0] = 9;
    Array[1] = 4;
    Array[2] = 5;
    Array[3] = 8;
    Array[4] = 1;
    Array[5] = 0;
    int pow = 1;
    int val = 0;
    
    for (int i = 0; i < lenght; i++) {
        val += Array[lenght-i-1] * pow;
        pow *= 10;
    }
    
    printf("Val is %d", val);
    return 0;
    }
    

    注意:这是一种原始的、非错误处理的方法。它可能不适用于所有情况。

    不使用pow的原因:

    pow 不返回整数,导致隐式整数转换不准确。 E.G 100 可以改为 99.9999,然后被截断为 99。

    【讨论】:

    • 这有点好笑。也许你应该提到你的意思是math.h 中的函数pow。另外,什么样的系统具有不能准确表示 100 的浮点数表示?我猜 c 并不总是定义它,因此您的精度可能低于 7 位,但您的示例仍然有点牵强。
    • @matt 浮点精度以及它不能/不能准确表示的内容未由 C 标准定义。实现方式千差万别。因此,假设它们总是准确的绝对是不安全的。
    • 它是在浮点标准中定义的,应该被c使用。在那里你可以保证给定点的整数总是完全准确的。
    • @KamiKaze 应该 =/= 保证。它不安全。 C 中的浮点数学通常是绝对不安全的。
    • 这与计算无关,而与准确性有关。根据给定的算法,您不能确定是否命中整数(即 0.9*10),但输入 9 您可以确定它是 9,而不是 8.99999。这就是我想澄清的。
    【解决方案3】:

    我不能 100% 确定您要做什么,但这是您想要做的:

    #include <stdio.h>
    
    int main ( void )
    {
    
        int numbers[] = { 1, 2, 3, 4, 5, 6 };
        int multiplier = 1;
    
        printf ( "First printout\n" );
        for ( int i = 0; i < 5; ++i )
            printf ( "Numbers[%i] = %i\n", i, numbers[i] );
    
        //this is where the numbers in the array are made into the 1, 10s, 100s etc
        for ( int i = 0; i < 5; ++i )
        {
            numbers[i] *= multiplier;
            multiplier *= 10;
        }
    
        printf ( "Second printout\n" );
        for ( int i = 0; i < 5; ++i )
            printf ( "Numbers[%i] = %i\n", i, numbers[i] );
    
        return 0;
    
    }
    

    我几个月前才开始学习 C。我确信有更好的方法可以做到这一点,但这是一个似乎可以解决您的问题的解决方案。我希望这会有所帮助!

    【讨论】:

      【解决方案4】:

      数字代表十位的数值。

      Array[0]*1 + Array[1]*10 + Array[2]*100 ... etc.
      

      你可以做一个循环来做。

      int value = 0;
      int pow = 1;
      for(int i = 0; i<length; i++){
      
         value += Array[i]*pow;
         pow *=10;
      }
      

      【讨论】:

      • 战俘?当你想要整数时,永远不要使用这个函数,因为 pow(10,2) 可能返回 99.9999,而不是 100。Juste 有一个变量“pow”初始化为 1,并且在 for 中 pow *= 10。
      • 没错,它也将是 double 类型,而不是 int
      猜你喜欢
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 2022-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多