Hoşgeldiniz

Çalışmalarımın sonuçları olan herşeyi bulabileceğiniz bir yer...

4 Mart 2010 Perşembe

C'de Sonsuz Basamaklı İki Sayının Çarpımı

Bu program girilecek olan, sonsuz basamaklı iki sayının çarpımını hesaplayan C programıdır. Kodların tasarımı ve algoritması tamamiyle bana aittir. Dev-C++, Miracle, Turbo C gibi programlarda derlenmiş ve çalıştırılmıştır. Buradaki sonsuzdan kasıt, ram'in alabileceği maksimum boyuttur.

#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
char st(char gelen);
int ts(int gelen);
int main()
{
int bsbs=0,isbs=0,i=0,j=0,elde=0,t=0,z=0,k=0;
char bs[BUFSIZ],is[BUFSIZ],key,ara[BUFSIZ];
printf("1.sayiyi gir:");
while((key=getch())!=0x0d)
{
if(isdigit(key)){printf("%c",key);bs[bsbs]=key;bsbs++;}
if(key=='\b'&&bsbs>0){printf("\b \b");bsbs--;bs[bsbs]='\0';}
}
printf(" (Basamak sayisi:%i)\n2.sayiyi gir:",bsbs);
while((key=getch())!=0x0d)
{
if(isdigit(key)){printf("%c",key);is[isbs]=key;isbs++;}
if(key=='\b'&&isbs>0){printf("\b \b");isbs--;is[isbs]='\0';}
}

for(i=isbs-1;i>-1;i--)
{

for(j=bsbs-1;j>-1;j--)
{
z=st(is[i])*st(bs[j])+st(ara[i+j+1])+elde;
if(z>9){ara[i+j+1]=ts(z%10);elde=z/10;}
else{ara[i+j+1]=ts(z);elde=0;}
if((j==0)&&(elde>0))ara[i+j]=ts(elde);
}
elde=0;
}

printf(" (Basamak sayisi:%i)\nCarpim sonucu:",isbs);
for(t=0;t<=isbs+bsbs-1;t++)if(isdigit(ara[t])){printf("%c",ara[t]);k++;} printf(" (Basamak sayisi:%i)\n",k); system("PAUSE"); return 0; } char st(char gelen) { switch(gelen) { case '0':return 0; case '1':return 1; case '2':return 2; case '3':return 3; case '4':return 4; case '5':return 5; case '6':return 6; case '7':return 7; case '8':return 8; case '9':return 9; default:return 0; } } int ts(int gelen) { switch(gelen) { case 0:return '0'; case 1:return '1'; case 2:return '2'; case 3:return '3'; case 4:return '4'; case 5:return '5'; case 6:return '6'; case 7:return '7'; case 8:return '8'; case 9:return '9'; default:break; } } //Developed by Erman AKTÜRK

0 yorum:

Yorum Gönder