2016-11-17 15 views
5

文字列で表された整数に対して計算を実行し、その結果を文字列に出力する方法を理解しています。しかし、文字列で表現された数字の小数点を使って同じことをする方法が失われています。Cでの文字列としての小数点の追加

ここで私は整数でそれをしました。コードのこの部分は、2つの整数追加されます。

int answer = 0; 
char str1[100]; 
int count = 0; 
int total = 0; 
int k = 0; 
int diff = 0; 

if (ele == ele2) { 
    for (k = strlen(op1) - 1; k > -1; k--) { 
     if ((strspn(operand, "+") == strlen(operand))) { 
      answer = (op1[k] - '0') + (op2[k] - '0'); 
     } else if ((strspn(operand, "-") == strlen(operand))) { 
      answer = (op1[k] - '0') - (op2[k] - '0'); 
     } 

     total += (pow(10, count) * answer); 
     count++;   
    } 
    sprintf(str1, "%d", total); 
    printf("Answer: %s ", str1);  
} 

出力

// 12 + 14 
Answer: 26 // Answer given as a string 

を例

12.2 + 14.5 // Three strings 
Answer: 16.7 // Answer as string 

現在の試行:

for (k = strlen(argv[1]) - 1; k > -1; k--) { 
     if (argv[1][k] == '.') { 
      dec = k; 
     } else { 
      answer = (argv[1][k] - '0') + (argv[3][k] - '0'); 
      total += (pow(10, count) * answer); 
      count++; 
     } 


    } 

    // needs to be converted to a long? 
    // ele is the length of the operand 
    total = total/pow(10, ele - dec); 

    sprintf(str1, "%d", total); 
    printf("Answer: %s ", str1); 
+0

だから、どうやって整数でやったのですか? – George

+0

"文字列としての整数"とはどういう意味ですか?数字列の小数点はどういう意味ですか?あなたは、[最小、完全で、かつ実証可能な例](http://stackoverflow.com/help/mcve)を作成して私たちを見せてください。また、入力と実際の出力と予想される出力を含めてください。 –

+0

@ George私のコードのスニペットで私のポストを再編集します。 – Jasmine

答えて

0

を開始するために、単純なアルゴを共有あなたと整数funcitonを追加すると問題ありません)。

10進数は基本的に "。"で区切られた2つの整数です。

  • "。"の位置を特定します。整数の両側をintegerPart、decimalPartとして取得する
  • decimalPartを取得する際の注意点は、すべてのdecimalPartの長さが同じでなければならないということです。そうでない場合は、接尾辞に「0」を追加します。
  • integerPartを追加し、decimalPartを追加し、decimalPartにcarryForwardsを処理します。

ので、

12.2 + 14.95 
= (12 + 14) (20 + 95) 
= 26 115 
= 26+1 15 
= 27.15 
+0

これは役に立ちます、ありがとうございます。私の問題は、しかし、私はすぐに全体の文字列として答えを印刷しています。そして私がやっているやり方は、各列の数字を最終結果に加えることです。では、小数点はどのようにして得られますか?私の説明がはっきりしていることを望む。 – Jasmine

+0

なぜあなたはあなたの関数を2回呼び出すのではなく、両方の出力を取得し、すべてを処理してから答えを出力します。あなたは本当に一度にそれをしたいですか?もしそうなら、他のアプローチがあります – thepace

+0

私は他の仕事と同じように一気に行った方が簡単だろうと思っていましたが、もっと良い方法があれば他の提案もできます。 – Jasmine

0

これは、迅速かつ汚い実装です:パラメータなしのチェック、無深いテストあなたはどのように処理するかのアイデアだけ。

#include <stdio.h> 
#include <stdlib.h> 

    typedef struct 
    { 
      int total_digits;; 
      int decimal_points; 
      int *number; 
    } NUMBER, *DECIMALNUMBER; 

    DECIMALNUMBER initilize(char *str) 
    { 
      DECIMALNUMBER result = calloc(1, sizeof(NUMBER)); 
      int in_decimal = 0; 
      char *s; 
      int i; 
      for (s = str; *s; s++) 
      { 
        if (isdigit(*s)) 
        { 
          result->total_digits++; 
          if (in_decimal) 
          { 
            result -> decimal_points++; 
          } 
        } 
        else if (*s == '.') 
        { 
          in_decimal = 1; 
        } 
        else 
        { 
          return NULL; 
        } 
      } 
      result->number = calloc(result->decimal_points, sizeof(int)); 
      i=0; 
      for (s = str; *s; s++) 
      { 
        if (isdigit(*s)) 
        { 
          result->number[i++] = (int)(*s - '0'); 
        } 
      } 
    //  printf("result->total_digits is %d\n",result->total_digits); 
    //  printf("result->decimal_points is %d\n",result->decimal_points); 
    //  printf("result is %d\n",result->number[--i]); 
    //  printf("result is %d\n",result->number[--i]); 
    //  printf("result is %d\n",result->number[--i]); 
      return result; 
     } 

    void print_number(DECIMALNUMBER p) 
    { 
      int i; 
      for (i=0; i<p->total_digits; i++) 
      { 
        if (i==p->total_digits - p->decimal_points) { 
          printf("."); 
        } 

        printf("%d", p->number[i]); 
      } 
      printf("\n"); 
    } 

    DECIMALNUMBER sum(DECIMALNUMBER a, DECIMALNUMBER b) 
    { 
      int max_decimals = a->decimal_points>b->decimal_points ? a->decimal_points : b->decimal_points; 

      int max_digits_count = a->total_digits>b->total_digits ? a->total_digits : b->total_digits; 
      DECIMALNUMBER result = calloc(1, sizeof(NUMBER)); 
      result->total_digits = max_digits_count; 
      result->decimal_points = max_decimals; 
      result->number = calloc(max_digits_count, sizeof(int)); 

      int i1 = a->total_digits-1; 
      int i2 = b->total_digits-1; 
      int i3 = result->total_digits-1; 
      int remainder = 0; 
      int summed; 
      while (i1 >= 0 || i2 >=0) 
      { 
        int aa = i1 < 0 ? 0 : a->number[i1]; 
        int bb = i2 < 0 ? 0 : b->number[i2]; 
        summed = aa + bb + remainder; 
        result->number[i3] = summed % 10; 
        remainder = summed/10; 
        i1--; 
        i2--; 
        i3--; 
      } 
      return result; 
    } 

    int main() 
    { 
      DECIMALNUMBER a = initilize("12.2"); 
      DECIMALNUMBER b = initilize("16.7"); 

      print_number(a); 
      print_number(b); 

      DECIMALNUMBER c = sum (a,b); 
      print_number(c); 

      return 0; 
    } 
関連する問題