C programlama dilinde iki sayıyı toplamak istediğimizde bir limitle karşılaşırız. Yani sadece belli basamağa kadar olan sayıları toplayabiliyoruz. Örneğin int değişkeni 16 bit uzunluğunda olsun. Bu durumda bu değişkene en fazla 5 basamaklı (65535) sayıları kaydedebiliriz.
Bu program sayesinde 50 basamağa kadar ve istenirse MAX değeri değiştirilerek daha fazla basamaklı sayıları toplayabiliriz. Toplam ekrana yazdırılır ve sonucun dışındaki boş basamaklara 0 değeri gösterilir.
Program kodlarına ayrıca github sayfasından da ulaşabilirsiniz.
Program Kodları ve Açıklamaları
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//Kac basamakli sayilari toplamak istiyorsak
//MAX degerini ona gore degistirebiliriz.
#define MAX 50
int main()
{
//Tanimlar...
char num1 [MAX], num2 [MAX], a, b, arr1 [MAX], arr2 [MAX];
int i, j, sum[MAX + 1], counter = 0, total;
//Dizileri sifirliyoruz.
for (i = MAX-1; i >=0; --i)
{
num1[i] = '0';
num2[i] = '0';
arr1[i] = '0';
arr2[i] = '0';
sum[i] = 0;
}
printf("1. sayiyi girin: ");
scanf("%s", num1);
printf("2. sayiyi girin: ");
scanf("%s", num2);
//x ve y degisgenine girilen sayilarin uzunlugunu atiyoruz.
int x = strlen(num1), y = strlen(num2);
/* i nin (MAX - 1) olmasini istiyoruz. Yadi arr1 ve arr2
* dizilerinin son degeri, sayilarin ilk degeri olacak.
* Bunun sebebi ise biz basit yontemle toplama yapiyoruz.
* Mesela birler basamaklari 5 ve 8 olsun: 8+5=13 tur. Bu
* durumda 1 elde sonuca 3 yazarız. Bu program bu mantıga
* dayaniyor.*/
for (i = MAX - 1, j = x - 1; i >= MAX - x; --i, --j)
{
arr1 [i] = num1 [j];
}
for (i = MAX - 1, j = y - 1; i >= MAX - y; --i, --j)
{
arr2 [i] = num2 [j];
}
for (i = MAX -1; i >= 0; --i)
{
a = arr1[i], b = arr2[i];
/* (int)(a + b - 2*'0') ifadesi a ve b karakter jodlarini
toplar ve bundan 0 karakter kodunun iki katini cikarir
boylece int turunden bir sayi elde etmis oluruz.
counter elde kalan degeri total e ekler.*/
total = (int)(a + b - 2*'0') + counter;
// counter totale eklendikten sonra sifirlanir. Yoksa hata olur.
counter = 0;
/* Eger total 10 dan buyukse bu durumda eldeyi arttirmamiz
ve totalden 10 cikarmamiz gerekiyor. */
if (total >= 10)
{
total -= 10;
counter = 1;
sum [i] = total;
}else{
sum [i] = total;
}
}
//Toplam sonucunu ekrana yazdiriyor.
for (i = 0; i < MAX; ++i)
{
printf("%d", sum[i]);
}
return 0;
Hiç yorum yok:
Yorum Gönder