IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Ну очень длинные числа, Си
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

Репутация: -  0  +


В общем суть задания это создание калькулятора который смогбы вычислить 99999999999! ну или 23142342342314234231423142343214*4325234534532534523443.Примерно так.Я решил подобные числа хранить в массивах типа int.Даже написал уже 2 ф.и для сложения и вычитания таких чисел(Но вот только если для беззнаковых), а вот как быть со знаком?Я подумал сделать так если перед первым числом стоит знак - то из 0 вычесть значение 1го элемента массива в который я это число помещаю.Разумно ли сделать так?И еще 1 вопрос никак не мгу сообразить как осуществить операцию ! при подобном представлении числа ?

Вот вобщемто то что я уже написал.



#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>
#include"TARASOV_ERROR.h"

#define KOL 5
#define STRLEN 50000
#define OSN 10

FILE *fo,*fi;

char *sim[KOL]={"+",
"-",
"*",
"/",
"!"};
char answer[STRLEN];
int num1[STRLEN],num2[STRLEN],res[STRLEN],*n1=num1,*n2=num2,*r=res,q,e,k,w1,w2,i;
char oper[STRLEN],*op=oper,c;

int showstring(const char *str)
{
char strASCII[STRLEN];
CharToOem (str,strASCII);
printf("%s\t",strASCII);
return 0;
}
int summa()
{

e=0;
while(w1||w2){
q=(*n1--)+(*n2--)+e;
if(q>9){q%=OSN;*r++=q;e=1;}
else{*r++=q;e=0;}
if(w1>0)w1--;
if(w2>0)w2--;
i++;
}
if(e==1){*r++=e;i++;}
for(i--;i!=-1;i--)
printf("%d",res[i]);
printf("\n");
return 0;
}
int subtract()
{
e=0;
r=res;
i=w1;
while(w1){
*n1+=e;
if(*n1<*n2){*r++=(*n1--)+OSN-(*n2--);e=-1;}
else {*r++=(*n1--)-(*n2--);e=0;}
w1--;
}
while(res[i]==0)i--;
for(i;i!=-1;i--)
printf("%d",res[i]);
printf("\n");
return 0;
}
void multiple()
{

}
void DIV()
{

}
void Fact()
{

}
int main()
{

w1=0;w2=0;

fo=fopen("outtext.txt","w");
if((fi=fopen("in.txt","r"))==NULL)exit(Error(2,"in.txt"));

while(c!=EOF)
{
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
memset(res,0,sizeof(res));
memset(oper,0,sizeof(oper));
c=getc(fi);
while(isspace©)c=getc(fi);
if(c==EOF){fclose(fi);return 0;}
while(isalnum©){
w1++;
*n1++=c-'0';
c=fgetc(fi);}
n1--;
while(isspace©)c=getc(fi);
while(!isspace©&&c!=';'&&!isdigit©){
*op++=c;
c=fgetc(fi);}
*op--=0;
while(isspace©)c=getc(fi);
while(c!=';'){
w2++;
*n2++=c-'0';
c=fgetc(fi);}
n2--;
for(k=0;k<KOL;k++)
if(*op==*sim[k])break;
switch(k)
{
case 0:summa();
break;
case 1:subtract();
break;
case 2: multiple();
break;
case 3: DIV();
break;
case 4: Fact();
fprintf(fo,"%s",answer);
break;
}
//}
}


// printf("%d",num1[4]);
fclose(fi);
fclose(fo);
return 0;
}



Сообщение отредактировано: blackhard -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 21:35
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name