您的位置:首页 > 其它

hdoj 1230 火星A+B(模拟加法进位运算)

2017-12-29 16:00 477 查看
思路:题意还是比较好理解的,第几位就是逢第几个素数进一;如个位逢2进1,十位逢3进1,百位逢5进1,....然后模拟这样的进位操作输出结果就好了;

代码如下:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <vector>

using namespace std;
int ss[30];
void fun() //找25位素数
{
int i;
int z;
int flag;
int x;
x = 0;
for (i = 2; i < 1000; i++)
{
flag = 0;
for (z =2; z < i; z++)
{
if (i%z == 0)
{
flag = 1;
break;
}

}
if (!flag)
ss[x++] = i;
if (x == 30)
break;
}
}

int change(char a[100], int y[100]) //将输入的字符串数,转化成整形数组
{
int len;
int i;
int head;
int tail;
int z;
int p;
int x;
len = strlen(a);
head = tail = 0;
x = 0;
for (i = 0; i < len; i++)
{

if (a[i] == ',')
{
tail=i;
p = 1;
for (z = tail-1; z>=head; z--)
{
y[x] += (a[z] - '0')*p;
p *= 10;

}
x++;
head = tail + 1;
}
if (i == len - 1)
{
y[x] += a[i] - '0';
}

}

return x;
}
int main()
{
int a[100];
int b[100];
int sum[100];
int len1, len2;
int wei;
int x;
int i;
char z[100],y[100];

fun();
while (scanf("%s %s", z, y) && (strcmp(z, "0") || strcmp(y, "0")))
{

wei = 0;
x = 0;
memset(sum, 0, sizeof(sum)); //一开始要进行初始化
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
len1=change(z,a)+1; //记录整型数组的长度
len2=change(y,b)+1;

while (len1>0 || len2>0) //从个位开始对每一位进行计算,并把整除的结果给高位,原位留下余数
{
if (len1 > 0 && len2 > 0)
{
sum[x + 1] += (sum[x] + a[len1 - 1] + b[len2 - 1] ) / ss[wei];
sum[x] = (sum[x]+a[len1 - 1] + b[len2 - 1] ) % ss[wei];

x++;
}
else if (len1 <= 0 && len2 > 0)
{
sum[x + 1] += (sum[x] + b[len2 - 1] ) / ss[wei];
sum[x] = (sum[x]+ b[len2 - 1] ) % ss[wei];

x++;
}
else if (len1 > 0 && len2 <= 0)
{
sum[x + 1] += (sum[x] + a[len1 - 1] ) / ss[wei];
sum[x] = (sum[x]+a[len1 - 1] ) % ss[wei];

x++;
}
wei++;
len1 --;
len2 --;

}
if (sum[x] == 0) //因为一开始是从低位到高位存入的,所以要反序输出,并且看最高位是否有值
{
for (i = x - 1; i >= 0; i--)
{
printf("%d", sum[i]);
if (i != 0)
printf(",");
else
printf("\n");
}

}
else
{
for (i = x; i >= 0; i--)
{
printf("%d", sum[i]);
if (i != 0)
printf(",");
else
printf("\n");
}
}
}
system("puase");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: