栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1489 Egyptian Multiplication

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1489 Egyptian Multiplication

#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;const char trans[]={"|n98r"};int acnt[6],bcnt[6],ccnt[6],dcnt[6],A,B;char a[50],b[50];int calcul(char s[],int cnt[])//将字符串记录成数组,返回十进制的值 {int i=0,num=0,len=strlen(s);while (i<len){while (i<len&&s[i]=='|')cnt[0]++,i++;while (i<len&&s[i]=='n')cnt[1]++,i++;while (i<len&&s[i]=='9')cnt[2]++,i++;while (i<len&&s[i]=='8')cnt[3]++,i++;while (i<len&&s[i]=='r')cnt[4]++,i++;i++;}for (i=4;i>=0;i--)num=num*10+cnt[i];return num; }bool lessthan(const int c[],const int b[])//ccnt是否小于bcnt,结束乘法 {for (int i=4;i>=0;i--)if (b[i]>c[i])return 1;else if (b[i]<c[i])return 0; return 1;}int Print(const int x[])//打印x[],每组结尾均有空格,包括末尾 {int i,j,tot=0;for (i=0;i<=4;i++){if (x[i]==0)continue;for (j=0;j<x[i];j++){printf("%c",trans[i]);tot++; }printf(" ");tot++;}return tot;}void Carry(int x[])//处理进位,高于万位省略 {for (int i=0;i<=4;i++)if (x[i]>9){x[i+1]+=(x[i]/10);x[i]%=10;}}void slove(){int i,len;bool f;memset(acnt,0,sizeof(acnt));//初始化,乘数 memset(bcnt,0,sizeof(bcnt));//被乘数 memset(ccnt,0,sizeof(ccnt));//a的double memset(dcnt,0,sizeof(dcnt));//最后结果 A=calcul(a,acnt);B=calcul(b,bcnt);ccnt[0]=1;while (lessthan(ccnt,bcnt)){f=(B%2)?1:0;B/=2;len=Print(ccnt);if (f){printf("*");len++;}for (;len<34;len++)printf(" ");len=Print(acnt);printf("n");if (f)for (i=0;i<=4;i++)dcnt[i]+=acnt[i];for (i=0;i<=4;i++)//Double ccnt[i]*=2,acnt[i]*=2;Carry(ccnt);Carry(acnt);}Carry(dcnt);printf("The solution is: ");Print(dcnt);printf("n");}int main(){gets(a);//输入以一个空行结束 while (gets(b)!=NULL){slove();gets(a);}return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/367197.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号