C 언어 초대 수 더하기 와 나머지
여기 서 초대 수 는 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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.