Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C++ by To4iK ( 16 years ago )
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
char first_arg[100],second_arg[100],res[10000],op,diff_arg[100];
int c=0,diff;
char* summ(char* A,char* B)
{
for(int i=strlen(res)-1; i>=0; i--)
{
res[i] = A[i]+B[i]-'0'+c;
(res[i]-'0'>=10)?((res[i]-=10), c=1):(c=0);
}
if(c==1)
{
for (int k=(strlen(res))-1; k>-1; k--)
{
res[k+1]=res[k];
}
res[0]='1';
}
return res;
}
char* razn(char* A,char* B)
{
for(int i=strlen(res)-1; i>=0; i--)
{
if(A[i]-B[i]>=0)
{
res[i] = A[i]-B[i]+'0';
}
else
for(int j=i-1;j>=0;j--)
{
if(A[j]>'0')
{
A[j]-=1;
res[i] = A[i]-B[i]+'0'+10;
for(int k=j+1;k<i;k++)
{
A[k]='9';
}
break;
}
}
}
return res;
}
void main()
{
puts("enter a,b (same length)");
puts("a:"); gets(first_arg);
puts("operation:"); scanf("%c", &op;);
fflush(stdin);
puts("b:"); gets(second_arg);
for(int i=0; i<((strlen(first_arg)<strlen(second_arg))?strlen(second_arg):strlen(first_arg)); i++)
{
res[i] = '0';
diff_arg[i]='0';
}
diff=strlen(first_arg)-strlen(second_arg);
if (diff >= 0)
{
for(int i=strlen(second_arg);i>-1;i--)
{
diff_arg[i+abs(diff)]=second_arg[i];
(abs(diff)!=0)?(diff_arg[i]='0'):(diff_arg[i]=diff_arg[i]);
}
}
if (diff < 0)
{
for(int i=strlen(first_arg);i>-1;i--)
{
diff_arg[i+abs(diff)]=first_arg[i];
diff_arg[i]='0';
}
}
switch (op)
{
case '+': {
if(diff>=0)
{
strcpy(res,summ(first_arg,diff_arg));
}
if(diff<0)
{
strcpy(res,summ(second_arg,diff_arg));
}
}break;
case '-':{
if(diff==0)
{
for(int i=0;i<strlen(first_arg);i++)
{
if(first_arg[i]<diff_arg[i])
{
strcpy(res,razn(diff_arg,first_arg));
for (int k=(strlen(res))-1; k>-1; k--)
{
res[k+1]=res[k];
}
res[0]='-';break;
}
for(int i=0;i<strlen(first_arg);i++)
{
if(first_arg[i]>diff_arg[i])
{
strcpy(res,razn(first_arg,diff_arg));
break;
}
}
}break;
}
if(diff>0)
{
strcpy(res,razn(first_arg,diff_arg));
}
if(diff<0)
{
strcpy(res,razn(second_arg,diff_arg));
for (int i=(strlen(res))-1; i>-1; i--)
{
res[i+1]=res[i];
}
res[0]='-';
}
}break;
case '*':{
for(int i=0; i<(strlen(first_arg)*strlen(second_arg); i++)
{
res[i] = '0';
}
for(int i=;i>-1;i--)
{
strcpy(res,summ(res,first_arg));
}
}
}
puts("=");
printf("%s\n",res);
getch();
}
Revise this Paste