C 언어 는 고정 밀 가감 법 을 실현 한다

3140 단어 C 언어가감 법
본 논문 의 사례 는 C 언어 가 높 은 정밀도 의 가감 법 을 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
우선,C 언어 중 각 유형의 가장 값 을 살 펴 보 자.
unsigned int 0~4294967295
int -2147483648~2147483647
unsigned long 0~4294967295
long -2147483648~2147483647
long long 의 최대 치:9223372036854775807
long long 의 최소 값:-922337203685475808
unsigned long 의 최대 값:1844674407370955161
__int 64 의 최대 치:9223372036854775807
__int 64 의 최소 값:-922337203685475808
unsigned __int 64 의 최대 치:18446744073709551615
C 언어 가 가지 고 있 는 유형 은 더 높 은 자릿수 의 연산 을 만족 시 키 지 못 하기 때문에 다른 방법 으로 더 많은 비트(높 은 정밀도)의 가감 을 실현 해 야 한다.
다음은 코드 를 사용 하여 높 은 정밀도 의 가감 을 실현 합 니 다.
1.고정 밀 덧셈:

#include<stdio.h>
#include<string.h>
int main(void)
{
    int len_max,i;   //len_max           ,    、  
    char m[999],n[999];    
    int a[999]={0},b[999]={0},c[999]={0};//    0,      
    scanf("%s%s",m,n);
    if(strlen(m)>strlen(n))
        len_max=strlen(m);
    else len_max=strlen(n);
    for(i=0;i<strlen(m);i++){    
        a[i]=m[strlen(m)-1-i]-'0';//      ,     ,    
    }
    for(i=0;i<strlen(n);i++){
        b[i]=n[strlen(n)-1-i]-'0';
    }
    int k=0;    //    
    for(i=0;i<=len_max;i++){    //    “=”
        c[i]=a[i]+b[i]+k;
        k=c[i]/10;
        c[i]%=10;
    }
    int flag=0;    //  flag          
    for(i=len_max;i>=0;i--){    //    
        if(c[i])
            flag=1;
        if(flag)
            printf("%d",c[i]);
    }
    if(!flag) printf("0");  //   0;
    return 0;
}
2.고정 밀 감법:

#include<stdio.h>
#include<string.h>
int main(void)
{
    int len_max,i;
    char m[999],n[999],temp[999];
    int a[999]={0},b[999]={0},c[999]={0};
    scanf("%s%s",m,n);
    if(strlen(m)>strlen(n))
        len_max=strlen(m);
    else
        len_max=strlen(n);
    if(strlen(n)>strlen(m)||(strlen(m)==strlen(n)&&strcmp(n,m)>0)){
       //        ,         strcmp    
        strcpy(temp,m);
        strcpy(m,n);
        strcpy(n,temp);
       //    
        printf("-");  //    
    }
    for(i=0;i<strlen(m);i++){
        a[i]=m[strlen(m)-1-i]-'0';
    }
    for(i=0;i<strlen(n);i++){
        b[i]=n[strlen(n)-1-i]-'0';
    }
    for(i=0;i<=len_max;i++){
        c[i]=a[i]-b[i];
        if(c[i]<0){
            c[i]+=10;    //    
            a[i+1]--;
        }
    }
    int flag=0;
    for(i=len_max;i>=0;i--){  //    
        if(c[i])
            flag=1;
        if(flag)
            printf("%d",c[i]);
    }
    if(!flag) printf("0");  //  !
    return 0;
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기