C 언어 초대 수 더하기 와 나머지

9525 단어 c초대형 수
질문 1: 초대형 더하기
여기 서 초대 수 는 int, long, long 의 범 위 를 넘 어선 숫자 를 나타 내기 때문에 간단하게 더 할 수 없다.이 때 는 문자열 로 입력 한 내용 을 문자열 에 저장 하고 문자 와 숫자 간 의 관 계 를 통 해 결 과 를 계산 해 야 합 니 다.사고방식: 1. xxxx + xxxxx 를 입력 하면 '+' 가 두 개의 문자열 로 나 뉜 다.2. 역순 으로 두 개의 키 꼬치 를 만 들 고 마지막 위 치 는 첫 번 째 정렬 이 되 며 위치 에 따라 10 이상 이면 뒤쪽 으로 1 을 들어간다.3. 두 수의 길이 가 다른 상황 을 고려 해 야 한다.4. 마지막 결 과 를 역순 으로 출력 하면 최종 플러스 결 과 를 얻 을 수 있다.
코드 는 다음 과 같 습 니 다:
#include <stdio.h>
#include <string.h>


void reverse(char *s,int len);
char * addLargeNumber(char *s1,char *s2);


int main(int argc, char const *argv[])
{
    char str[100];
    int len[10];//          
    scanf("%s",str);
    char *sep = "+-*/";


    char *p = strtok(str,sep);
    char *s = p;
    char *k = p;
    len[0] = strlen(p);

    reverse(p, len[0]);
    puts(p);


    while(1)
    {
         s = strtok(NULL, sep);


         if (s == NULL)
         {
            break;
         }


         len[1] = strlen(s);
         reverse(s,len[1]);
         puts(s);
         k = s;//
    }
    printf("access to addLargeNumber
"
); p = addLargeNumber(p,k); len[2] = strlen(p); reverse(p,len[2]); puts(p); return 0; } // void reverse(char *s,int len) { char temp; int i; for(i = 0;i<len/2;i++) { temp = s[i]; s[i] = s[len-1-i]; s[len-1-i] = temp; } } // , , char * addLargeNumber(char *s1,char *s2) { char *p = s1; char *q = s2; char k; int i; printf(" 1 =%lu 2 =%lu
"
, strlen(p),strlen(q)); int len = strlen(q); // p 。 len 。 if (strlen(s1)<strlen(s2)) { len = strlen(p); q = s2; p = s1; } int difflen = strlen(p)-strlen(q);// 。 //printf("len = %d difflen = %d
",len ,difflen);
for (i = 0; i <len; ++i) { int a = p[i] + q[i] -96; //printf("a = %d
", a);
if (a>=10) { k = a -10+ 48; p[i+1] += 1; } else { k = a + 48; } //printf("k = %c
", k);
p[i] = k; printf("p[%d] = %c
"
, i,p[i]); } // 。 :1379+128( ) 15999+148 for(i = 0;i<difflen;i++) { if (p[len+i] == 58) { p[len+i] -= 10; if (i == difflen-1) {// i , ‘:’, p[len+i+1] = 49;// , '1' p[i]。 p[len+difflen+1] = 0; } else { p[len+i+1] += 1;// , p[i] ASCII 1. } printf("p[%d] = %c
"
,len+i,p[len+i] ); } else { break; } } printf(" = %lu
"
, strlen(p)); puts(p); return p; }

문제 2: 초대형 수 를 int 정수 로 나 누 어 나머지 를 구한다.
#include <stdio.h>
#include <string.h>
int modBigNumber(char * s,int modNumber);

int main(int argc, char const *argv[])
{
    /*        int   ,  */

    char  *strs = "14689";
    int p = 4;

    int result = modBigNumber(strs,p);
    printf("%d
"
, result); return 0; } int modBigNumber(char * s,int modNumber){ printf(" :%s
"
, s); long sum = 0; // “14689” , 1*10^5+4*10^4+6*10^3+8*10^2+9*10^1, X,Y,Z /// , , // (X+Y+Z)modP =((X+Y)modP+ Z)modP = ((XmodP +Y)modP+Z)modP // : for (int i = 0; i < strlen(s); ++i) { sum = sum*10 + s[i]-48;// ASCII 48 printf(" :%ld
"
, sum); sum %= modNumber; printf(" :%ld
"
, sum); } return sum; }

좋은 웹페이지 즐겨찾기