티스토리 뷰
문제
정수를 세 부분으로 나누고 싶습니다. 기본적으로 숫자가 54353325421435
있고이를 다음과 같이 나누고 싶습니다.
part[0]=54353
part[1]=32
part[2]=5421435
그런 다음 추가하십시오.
해결책
for
루프는 최선 다할 것입니다. for
루프가 무엇인지 모르는 경우 기본적으로 정의 된 시작 및 끝 지점이있는 반복 수단입니다. 예를 들어, 다음은 "hello world"를 2 번 출력하는 간단한 반복입니다.
for(int i=0; i<2; i++)
cout << "Hello World" << endl;
여기에서for
루프에 대해 자세히 알아볼 수 있습니다 . 귀하의 경우에는 이것을 반복하는 것이 좋습니다. 따라서 기본적으로 먼저 변수를 정수로 저장합니다. (당신이 할 수 있다고 확신합니다.)
const unsigned long long NUM = 54353325421435; //Make it a constant to not change it
그리고 위에서 언급했듯이 부품 배열이 있습니다.
int part[3]
지금 할 수있는 것은 NUM
. 첫 번째 작업을 수행하는 방법을 보여 드리겠습니다.
int access_digits(const unsigned long long int n, int index)
{
int digit_array[64] = {0};
unsigned long long digits = 0, digit, number = n;
while (number) {
digit = number % 10;
number /= 10;
digit_array[digits] = digit;
digits++;
}
return digit_array[digits - index - 1];
}
std::string digits;
for(int i=0; i<=4; i++)
{
digits.append(std::to_string(access_digits(NUM,i)));
}
int digit_int = std::stoi( digits );
위에서 볼 수 있듯이 먼저 access_digits
기능이 있습니다. 이 기능을 사용하여 인덱스로 숫자에 액세스 할 수 있습니다. (크레딧은 Slayther 로 이동 합니다 .) 어쨌든, 그 후에는 0에서 4까지 반복하여 part[0]
. 처음 5 자리는 54353
.
이제 마지막으로 그들을 더하고 싶습니다. 글쎄요, 그것은 꽤 쉽습니다. 숫자를 반복하고 누산기로 다음과 같이 추가하십시오.
int accum=0;
for(int i=0; i<4; i++)
{
accum += access_digits(digit_int,i);
}
운동
이제 이것을 편집 part[1]
하여 part[2]
아래에 실습 섹션 을 포함 시키십시오.
참고 문헌
C에서 정수의 숫자 반복
십대 영토 채팅
for 루프
std :: string
문자열 :: 추가
용어 사전
For 루프 :
실행은
init-statement
한 번 실행 한 후statement
와iteration_expression
의 값이 될 때까지 반복하여condition
거짓이된다. 테스트는 각 반복 전에 수행됩니다.
통사론
형식적 구문 :
attr(optional) for ( init-statement condition(optional) ; iteration_expression(optional) ) statement
비공식 구문 :
attr(optional) for ( declaration-or-expression(optional) ; declaration-or-expression(optional) ; expression(optional) ) statement
-------------------숫자의 합계를 원하는 경우. 위에서 언급했듯이
int number,digit,sum=0;
while(number!=0)
{
digit=number%10;
sum=s+digit;
number=number/10;
}
이 코드 세그먼트는 번호의 자릿수 합계를 계산합니다.
if number=123;
it will calculate sum=3+2+1=6;
출처
https://stackoverflow.com/questions/39940161