#include <stdio.h>
int main()
{
long a,b,num,total=0,alpha;
scanf("%ld",&a);
scanf("%ld",&num);
for (int i =0;i<a;i++){
alpha=num%10;
total+=alpha;
num=num/10;
}
printf("%ld",total);
}
로 풀려고 했지만, 테스트 케이스중에 24자리 정도의 정수가 있어서 다른방법으로 접근해야한다.
#include <stdio.h>
int main()
{
int a,b,total=0,alpha;
char num[100]={0};
scanf("%d",&a);
scanf("%s",num);
for (int i =0;i<a;i++){
printf("%d\n",num[i]);
total+=num[i];
}
printf("%d",total);
}
이런식으로 접근하니까
5
54321
53
52
51
50
49
255
이런식으로 출력되었다. 문자열 리스트에 정수값을 넣어서 아스키값이 저장, 출력되서 그렇다. 그렇기에 아스키에서 숫자 0을 의미하는 48을 이용해 total+=num[i]-48;
하면 해결된다.
#include <stdio.h>
int main()
{
int a,b,total=0,alpha;
char num[100]={0};
scanf("%d",&a);
scanf("%s",num);
for (int i =0;i<a;i++){
total+=num[i]-48;
}
printf("%d",total);
}
숫자가 너무 크다면
long long int
보다 차라리리스트
를 이용하자.
#include <stdio.h>
int main()
{
int a,b,total=0,alpha, arr[26]={0};
char string[100]={0};
scanf("%s",string);
for (int i=0;string[i]!='\0';i++){
if(arr[string[i]-97]==0){
arr[string[i]-97]=i;
if (i==0){
arr[string[i]-97]=200;
}
}
}
for (int i =0;i<26;i++){
if(arr[i]==0){
arr[i]=-1;
}
}
for (int i =0;i<26;i++){
if (arr[i]==200){
arr[i]=0;
}
printf("%d ",arr[i]);
}
}
#include <stdio.h>
int main()
{
int re,reo;
char input[100];
scanf("%d",&reo);
for (int a =0;a<reo;a++){
scanf("%d %s",&re,input);
for (int i = 0; input[i]!='\0';i++){
for (int j=0;j<re;j++){
printf("%c",input[i]);
}
}
printf("\n");
}
}