前提・実現したいこと
C言語で多倍長整数の加算を行いたいと思っています。多倍長整数の計算を行うにあって、下の様な形のワークフローでの実装を考えています。
1. 文字列を2つ受け取る : ["1","2","3","4","5"] , ["1","7","8","9","1"] 2. 配列を逆に変換する : ["5","4","3","2","1"] 3. 作成された二つの配列のうち、大きいサイズの方のサイズを基に新しい配列を作成する。 4. 二つの配列のそれぞれの要素の足し算を行う 例 : [5,4,3,2,1] と [1,9,8,7,1] という配列の場合 [(5+1) , (4+9) , (3+8) , (2+7) , (1+1)] → [6,13,11,9,2] ※ もし リストへのアクセスができない、範囲外の場合は0を割り当てる。 7. ある桁の数が10以上であれば、その桁を-10して、次の桁に1足す [6,13,11,9,2] → [6,3,2,0,3] 8. 配列を逆順にして、文字列に直す → "30236"
上のワークフローの4番をatoi関数を使って実装する事を考えているのですが、atoi関数を上手く適用させる事ができません。
発生している問題・エラーメッセージ
.\new.c: In function 'main': .\new.c:71:23: warning: passing argument 1 of 'atoi' makes pointer from integer without a cast [-Wint-conversion] num1 = atoi(p_input1[i]); ^~~~~~~~ In file included from .\new.c:2:0: c:\mingw\include\stdlib.h:335:38: note: expected 'const char *' but argument is of type 'char' _CRTIMP __cdecl __MINGW_NOTHROW int atoi (const char *); ^~~~ .\new.c:78:23: warning: passing argument 1 of 'atoi' makes pointer from integer without a cast [-Wint-conversion] num2 = atoi((p_input2[i])); ^ In file included from .\new.c:2:0: c:\mingw\include\stdlib.h:335:38: note: expected 'const char *' but argument is of type 'char' _CRTIMP __cdecl __MINGW_NOTHROW int atoi (const char *);
該当のソースコード
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <stdint.h> 4#include <string.h> 5#include <strings.h> 6#define MAX_INPUT 100 7 8 9// 二つの数を比較して大きい方を選択する 10int max(int a, int b) { return a > b ? a : b; } 11 12 13// 文字配列を逆順にする 14void revStr(char* str){ 15 int size = strlen(str); 16 int i,j; 17 char tmp = {0}; 18 19 for(i = 0, j = size - 1; i < size / 2; i++, j--){ 20 tmp = str[i]; 21 str[i] = str[j]; 22 str[j] = tmp; 23 } 24 25 return; 26} 27 28 29 30// main 31int main(){ 32 33 char input1[MAX_INPUT]; 34 char input2[MAX_INPUT]; 35 const char *p_input1 = input1; 36 const char *p_input2 = input2; 37 38 int input1_siz; 39 int input2_siz; 40 int ans_size; 41 42 43 printf("Enter The First LongInt"); 44 fgets(input1 , MAX_INPUT , stdin); 45 46 printf("Enter The Second LongInt"); 47 fgets(input2 , MAX_INPUT , stdin); 48 49 printf("%s",input1); 50 printf("%s",input2); 51 52 // input1,input2の配列サイズを入手する 53 input1_siz = strlen(input1); 54 input2_siz = strlen(input2); 55 56 // 二つの配列の内大きい方を作成する。 57 int N = (max(input1_siz, input2_siz)); 58 int ans_lis[N]; 59 60 revStr(input1); 61 revStr(input2); 62 63 for (int i = 0; i < N; i++){ 64 65 int num1 , num2; 66 // OutOfIndexしないようにする。 67 if(input1_siz < N){ 68 num1 = 0; 69 } 70 else{ 71 num1 = atoi(p_input1[i]); 72 } 73 74 if(input2_siz < N){ 75 num2 = 0; 76 } 77 else{ 78 num2 = atoi((p_input2[i])); 79 } 80 81 ans_lis[i] = (num1 + num2); 82 83 } 84 85 for(int i = 0; i < N; i++){ 86 printf("%d",ans_lis[i]); 87 } 88 89 90 91}
試したこと
atoi関数のreturnも整数型でatoi関数に入れている引数もconst *charを入れていると思うのですが、errorコードが取れません。
お忙しいとは思いますが、よろしくお願いいたします。
情報に不足がありましたら、ご指摘お願いいたします。
回答3件
あなたの回答
tips
プレビュー