Hero Image
큰수 작은수로 정렬후 덧셈

입력 받은 수를 큰수와 작은수로 정렬후 덧셈 모든 내용은 Git hub 에도 있습니다. 문제 임의의 수를 입력 받아 큰수와 작은수로 정렬한후 덧셈을 함. 필요 자료구조 및 알고리즘 ASCII Code를 통한 계신(키보드 입력및 파일 입출력) Bubble Sorting Binary Addition Algotirthm 설계 KeyBoard Input or File Input Processing Dynamic Allocation for Big&Small Integer Bubble sort for Big&small integer Binary Addition Algorithm 구현 Input Any Number : 원하는 아무 숫자를 Space로 구분지어 입력합니다. Result : Space로 입력된 숫자들을 오름차순 내림차순으로 정렬되어 Binary Addition이 됩니다. #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <sys/time.h> #define MAX_STR_SIZE 100 void bubble(char a[], int n); void rebubble(char b[], int n); void swap(char *, char *); void showstream(char a[]); void sum(char big[],char small[]); void reverse(char a[]); void ncarry(int n,int end); void whatbubblein(char a[],char b[]); void input_string(); char result[MAX_STR_SIZE]; char str_before[MAX_STR_SIZE]; int main() { char str_after[MAX_STR_SIZE]; printf("Input Any Number : "); input_string(); strcpy(str_after,str_before); bubble(str_before,(int)strlen(str_before)); rebubble(str_after,(int)strlen(str_before)); sum(str_before,str_after); reverse(result); printf("result : "); showstream(result); return 0; } void input_string(){ char str_after[MAX_STR_SIZE]; char str_read[MAX_STR_SIZE]; int i,j,k=0; fgets(str_read , MAX_STR_SIZE,stdin); for (int i = 0; i < strlen(str_read); ++i) { if(str_read[i]==10){ str_before[k] ='\0'; } if(str_read[i]!=32 && str_read[i]!=10){ //32 space bar str_before[k]=str_read[i]; k++; } } } void bubble(char a[], int n) { /* n is the size of a[] */ int i, j,k; for (i = 0; i < n - 1; ++i){ for (j = n - 1; j > i; --j){ if (a[j-1] > a[j]){ swap(&a[j-1], &a[j]); } } } } void rebubble(char b[], int n){ int i,j,k=0; for (i = 0; i < n - 1; ++i){ for (j = n - 1; j > i; --j){ if (b[j-1] < b[j] ){ swap(&b[j-1], &b[j]); } } } } void swap(char *p,char *q){ static char cnt=1; char temp=*p; *p=*q; *q=temp; cnt++; } void showstream(char a[]){ puts(a); } void sum(char big[],char small[]){ char temp[MAX_STR_SIZE]; int i,j,k; static int count=0; int leng,carry=0; leng = (int)(strlen(big)); for (int i = 0; i < leng; ++i) { temp[i]=(big[leng-1-i]+small[leng-1-i])-48; if(carry==1){ result[i]=1+temp[i]; carry = 0; if(result[i]>=58){ result[i]=result[i]-10; result[i+1]=result[i+1]+49; ncarry(count,i); carry=1; } } else{ if(temp[i]>=58){ result[i]=temp[i]-10; carry=1; ncarry(count,i); } else{ result[i]+= temp[i]; } } count++; } } void reverse(char a[]) { char temp[MAX_STR_SIZE]; int x; x=strlen(a); for(int n=x-1;n>=0;n--) { temp[x-n-1]=a[n]; } temp[x]='\0'; strcpy(result,temp); } void ncarry(int n,int end){ if(n==end){ result[n+1]='1'; } else{ result[n+1]=result[n+1]+1; } } void whatbubblein(char a[],char b[]) { int i,leng; leng = (int)(strlen(a)); printf("bubble :\t"); for (int i = 0; i <leng; ++i) { printf("[%d]:%d(%c) ",i, a[i],a[i]); } printf("\nrebubble :\t"); for(i= 0; i <leng;i++) { printf("[%d]:%d(%c) ",i, b[i],b[i]); } printf("\n"); } Refference 숫자 알고리즘

Hero Image
다양한 패턴 출력

Variety of star 다양한 삼각형 출력 regular triangle * *** ***** ******* ********* right align of regular triangle * ** *** **** ***** right align of regular triangle * ** *** **** ***** Inverted triangle ********* ******* ***** *** * Left align of inverted triangle ***** **** *** ** * Right align of inverted triangle ***** **** *** ** * int input; int space=0; int state_num=0; scanf("%d",&input); printf("\nregular triangle\n"); space=input; for(int i=0;i<input;i++){ for(int k=0;k<space-1;k++) printf(" "); for(int j=0;j<2*i+1;j++){ printf("*"); } space--; printf("\n"); } space=0; printf("\nright align of regular triangle\n"); space=input-1; for (int i = 0; i < input; ++i) { for (int k = 0; k < space; ++k) { printf(" "); } for (int j = 0; j < input-space; ++j) { printf("*"); } printf("\n"); space--; } printf("\nright align of regular triangle\n"); space=input-1; for (int i = 0; i < input; ++i) { for (int j = 0; j < input-space; ++j) { printf("*"); } printf("\n"); space--; } printf("\nInverted triangle\n"); for (int i = 0; i < input; ++i) { for (int j = 0; j < i; ++j) { printf(" "); } for (int k = (2*i)+1; k <=(input*2-1) ; ++k) { printf("*"); } puts(""); } space=0; //inverted triangle left printf("\nLeft align of inverted triangle\n"); for (int i = 0; i < input; ++i) { for (int k = 0; k < input-space; ++k) { printf("*"); } space++; printf("\n"); } space=0; printf("\nRight align of inverted triangle\n\n"); //inverted triangle right for (int i = 0; i < input; ++i) { for (int j =0 ; j < space; ++j) { printf(" "); } for (int k = 0; k < input-space; ++k) { printf("*"); } space++; printf("\n"); } Applied multiplication 구구단 이쁘게 출력

Hero Image
Problem.1110

백준 단계별 문제집 레벨 3 모든 내용은 Git Hub에도있습니다. 1110번[더하기 사이클] 처음 덧셈의 수식이 다시 한번 돌아 올때 까지의 사이클을 찾는것입니다. start: 26 [2+6=8 =>(68) 6+8=14 =>(84) 8+4=12 =>(42) 4+2=6 =>(26) 2+6=8] 위의 예제 처럼 26이 다시 나올려면 68 -> 84-> ->42 -> 26 이렇게 4번만에원래의 숫자로 돌아왔습니다. 알고리즘은 비교적간단합니다. 처음 상태와 다음 상태 들을 비교하면서 같은 상태가 나올때 까지 사이클을 카운트 합니다. #include <stdio.h> int circle(); int tokken_units(); int token_tens(); int main(){ int N,temp_N; int result; scanf("%d",&N); printf("%d\n",circle(N)); } int circle(int N){ int count=1; int init_state[3]; int next_state[3]; int arg_first,arg_second,arg_result; init_state[0]=token_tens(N); //첫 시작의 10의자리 init_state[1]=tokken_units(N); //첫 시작의 1의자리 init_state[2]=init_state[0]+init_state[1]; //첫 시작의 덧셈 결과 next_state[0]=init_state[0]; next_state[1]=init_state[1]; next_state[2]=init_state[2]; while(1){ if(next_state[2]<10){ next_state[0]=next_state[1]; next_state[1]=next_state[2]; next_state[2]=next_state[0]+next_state[1]; } else{ next_state[0]=next_state[1]; next_state[1]=tokken_units(next_state[2]); next_state[2]=next_state[0]+next_state[1]; } if(next_state[0]==init_state[0]&&next_state[1]==init_state[1]&&next_state[2]==init_state[2]){ //다음 계산식이 처음과 같아지면 종료 break; } count++; } return count; } int tokken_units(int N){ int units;//units 일의 자리 units= N-(N/10)*10; return units; } int token_tens(N){ int tens;//units 일의 자리 tens= N/10; return tens; }