2017-01-05 20 views
-1

私は、プログラムがファイルからの入力を受け取り、10進数を2進数に変換し、2進数形式の1の数を数える単純なプログラムを持っていますか? 小さい値の場合は 、15755645551のような巨大な値の場合は明らかに機能しません 誰もがこの問題を解決する方法を知っていますか? 誰でも自分のコードを試すことができますか? ありがとうございます! は、ここに私のコードです:変換する方法巨大な10進値バイナリ

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
#include <string.h> 
#define BUFFER 25 

long number_read = 0; 
long number_of_ones = 0; 
long remainder_value = 0; 
long binary = 0; 
long base = 0; 
long buff[BUFFER]; 

int main() 
{ 
    FILE *fp;     //file pointer fp 
    fp = fopen("File.txt", "r+"); 

    while (fgets(buff, sizeof(buff), fp) != NULL) 
    { 
     number_read = atoi(buff);     //ASCII to integer 
     printf("\nnumber is=%d", number_read); 
     while (number_read > 0) 
     { 
      remainder_value = number_read % 2; 
      /* To count no.of 1s */ 
      if (remainder_value == 1) 
      { 
       number_of_ones++; 
      } 

      binary = binary + remainder_value * base; 
      number_read = number_read/2; 
      base = base * 10; 
     } 
     printf("\nNo.of 1's in It's binary representation is = %d\n", number_of_ones); 
     number_of_ones = 0; 
    } 
    fclose(fp); 
    return 0; 
} 
+2

'15755645551'は' long'に収まらないかもしれませんか? –

+0

はい..実際に私は長い間試してきましたが、上記のことを忘れてしまいました。 – Garryp

答えて

0

"長い" タイプは "INT" タイプとして4つのバイトを占有するので。あなたは "long long"タイプに変更する必要があります。

関連する問題