`
ansjsun
  • 浏览: 199634 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

两个大数字相乘

 
阅读更多

没什么只是.一个demo

 

 

package net.csdn.service.tag.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import love.cq.util.StringUtil;
import net.csdn.exception.ArgumentErrorException;
import net.csdn.pojo.tag.ObjTag;
import net.csdn.pojo.tag.Tag;
import net.csdn.service.tag.util.domain.MyTag;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.commons.lang.StringUtils;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.log.Log;
import org.nutz.log.Logs;

@IocBean
public class DocTagService {
	private static final Log log = Logs.getLog("DocTagService");
	@Inject
	private TagsManageService tagsManageService = null;

	@Inject
	private DocStoreRemoteService docStoreRemoteService;

	public boolean insert(String typeName, String jsonDate, String tagsStr) {
		if (StringUtils.isBlank(tagsStr)) {
			throw new ArgumentErrorException("tags 不可以为空");
		}
		ObjTag objTag = null;
		JSONObject fromObject = JSONObject.fromObject(jsonDate);
		log.info(fromObject.get("id") + "	" + tagsStr);
		String[] tags = tagsStr.split(",");
		String body = StringUtil.rmHtmlTag(fromObject.getString("body"));

		// /如果正文为空
		if (StringUtil.isBlank(body) || tags == null || tags.length == 0) {
			return false;
		}

		String tempTagStr = null;

		// 删除这条记录
		delete(typeName, fromObject.getInt("id"));

		for (int i = 0; i < tags.length; i++) {
			// 先查询tags是否存在于数据库中.如果不存在就创建一个
			tempTagStr = tags[i].toLowerCase().trim();
			if (StringUtil.isBlank(tempTagStr)) {
				continue;
			}
			Tag tag = tagsManageService.findTagByName(tempTagStr);

			if (tag == null) {
				tag = new Tag();
				tag.setName(tempTagStr);
				tagsManageService.saveTag(tag);
			}
			// 插入一条记录到数据库中
			objTag = new ObjTag();

			objTag.setObject_id(fromObject.getInt("id"));

			objTag.setTag_id(tag.getId());

			objTag.setCreated_at(fromObject.getLong("created_at"));

			try {
				objTag.setChannel_id(fromObject.getInt("channel_id"));
			} catch (Exception e) {
				log.info("channel get error!");
			}

			tagsManageService.saveAbstractObjTag(typeName, objTag);
		}
		return true;
	}

	public void setTagsManageService(TagsManageService tagsManageService) {
		this.tagsManageService = tagsManageService;
	}

	/**
	 * 在tag系统中删除文章
	 * 
	 * @param typeName
	 * @param objectId
	 */
	public void delete(String typeName, Integer objectId) {
		// TODO Auto-generated method stub
		if (objectId == null) {
			throw new ArgumentErrorException("待删除文章Id 不可以为空");
		}
		tagsManageService.deleteDocTag(typeName, objectId);
	}

	/**
	 * 超早tag的数量
	 * 
	 * @param typeName
	 * @param objectId
	 */
	public int findTagCount(String typeName, Integer objectId) {
		// TODO Auto-generated method stub
		if (objectId == null) {
			throw new ArgumentErrorException("待删除文章Id 不可以为空");
		}
		return tagsManageService.findTagCount(typeName, objectId);
	}

	/**
	 * tag补录,慎用会覆盖用户原本的tag
	 * 
	 * @param type
	 * @param fromId
	 * @param endId
	 * @return
	 */
	public void updateTagByDoc(String typeName, int fromId, int endId, RecommenderService rs, HashMap<String, Integer> tagMap, boolean needSuggestTag) {
		// TODO Auto-generated method stub
		StringBuilder sb = new StringBuilder();
		fromId = Math.max(fromId, 1);
		for (int i = fromId; i <= endId; i++) {
			if (i % 100 == 0) {
				sb.append(i);
				try {
					insertTagsAndUpdateMongo(typeName, sb.toString(), rs, tagMap, needSuggestTag);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					log.error(e + " " + sb);
				}
				sb = new StringBuilder();
			} else {
				sb.append(i + ",");
			}
		}
		// 补录
		if (sb != null && sb.length() > 0) {
			sb.append(0);
			try {
				insertTagsAndUpdateMongo(typeName, sb.toString(), rs, tagMap, needSuggestTag);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				log.error(e + " " + sb);
			}
		}
	}

	/**
	 * 插入tag
	 * 
	 * @param typeName
	 * @param ids
	 * @param rs
	 * @param tagMap
	 */
	private void insertTagsAndUpdateMongo(String typeName, String ids, RecommenderService rs, HashMap<String, Integer> tagMap, boolean needSuggestTag) {
		// TODO Auto-generated method stub

		JSONArray objs = docStoreRemoteService.findByIds(typeName, null, ids);
		JSONArray newObjs = new JSONArray();
		// 如果mongo那什么都没查出来就不走后面的了
		if (objs == null || objs.size() == 0) {
			return;
		}

		// 删除所有的关联
		tagsManageService.deleteDocTagByIds(typeName, ids);

		List<ObjTag> all = new ArrayList<ObjTag>();

		String title = null;
		String body = null;
		// 重新插入
		for (Object object : objs) {
			JSONObject job = (JSONObject) object;

			// 防止出现空hash
			if (job.size() <= 3) {
				continue;
			}

			List<MyTag> tag_suggest = null;

			try {

				StringBuilder sb = new StringBuilder();
				if (needSuggestTag) {

					try {
						title = job.getString("title");

					} catch (Exception e) {
					}

					try {
						body = job.getString("body");
					} catch (Exception e) {
					}

					tag_suggest = rs.tag_suggest(title, body, "csdn", 5);
					for (MyTag myTag : tag_suggest) {
						all.add(insertTagsAndUpdateMongo(tagMap, job, sb, myTag, typeName));
					}
				} else {
					String tag = job.getString("tag");
					if (StringUtil.isNotBlank(tag)) {
						String[] tags = tag.split(",");
						for (String string : tags) {
							if (StringUtil.isNotBlank(string)) {
								MyTag myTag = new MyTag(string.trim().toLowerCase(), 0, string.length());
								all.add(insertTagsAndUpdateMongo(tagMap, job, sb, myTag, typeName));
							}
						}
					} else {
						continue;
					}
				}
				if (StringUtil.isNotBlank(sb) && sb.length() > 1) {
					job.put("tag", sb.subSequence(0, sb.length() - 1));
					newObjs.add(job);
					log.info("insert " + job.getString("tag"));
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		try {
			// 批量保存关联
			if (all.size() == 0) {
				log.info("not have any change to skip! " + ids.substring(0, 10));
				return;
			}

			if (needSuggestTag && newObjs.size() > 0) {
				// 批量修改mongo中的tag
				log.info("update mongo ok" + newObjs.size());
				docStoreRemoteService.update(typeName, newObjs);
			}

			StringBuilder sb = new StringBuilder("INSERT INTO ");
			sb.append(tagsManageService.getTableName(typeName));
			ObjTag objTag = null;
			sb.append(" (tag_id,object_id,created_at,channel_id) values ");
			for (int i = 0; i < all.size(); i++) {
				objTag = all.get(i);
				sb.append("(");
				sb.append(objTag.getTag_id());
				sb.append(",");
				sb.append(objTag.getObject_id());
				sb.append(",");
				sb.append(objTag.getCreated_at());
				sb.append(",");
				sb.append(objTag.getChannel_id());
				if (i == all.size() - 1) {
					sb.append(");");
				} else {
					sb.append("),");
				}
			}

			tagsManageService.execute(sb.toString());
			log.info("batchSave mysql ok" + all.size());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			log.error("batchSave mysql error" + ids);
			e.printStackTrace();
		}
	}

	private ObjTag insertTagsAndUpdateMongo(HashMap<String, Integer> tagMap, JSONObject job, StringBuilder sb, MyTag myTag, String type)
			throws InstantiationException, IllegalAccessException {
		sb.append(myTag.getName() + ",");
		Integer tagId = tagMap.get(myTag.getName());
		// 如果不在hash表中就查数据库
		if (tagId == null) {
			Tag tag = tagsManageService.findTagByName(myTag.getName());
			// 如果为空就插入一个
			if (tag == null) {
				tag = new Tag();
				tag.setName(myTag.getName());
				tagsManageService.saveTag(tag);
			}
			// 设置到map中
			tagMap.put(tag.getName(), tag.getId());
			tagId = tag.getId();
		}
		// 插入一条记录到数据库中
		ObjTag objTag = new ObjTag();

		objTag.setObject_id(job.getInt("id"));

		objTag.setTag_id(tagId);

		objTag.setCreated_at(job.getLong("created_at"));

		try {
			objTag.setChannel_id(job.getInt("channel_id"));
		} catch (Exception e) {
			objTag.setChannel_id(-1);
			log.error("channel get error!");
		}

		return objTag;
	}

}
分享到:
评论

相关推荐

    大数相乘算法解析,实现20位的大数相乘

    20位左右的大数相乘算法解析,用一个整型数组表示一个大数,数组的每个元素储存大数的一位数字,则实际的大数d表示为: d=a[k]*10的k-1次幂+a[k-1]*10的...(2),实现两个大数相乘. (3),再此基础上实现两个大数相除

    JS实现两个大数(整数)相乘

    那么如何实现两个大数相乘呢?我用JS实现了一下,代码如下: 代码如下: console.log(bigMut(“567”, “1234”)); // 699678 function bigMut(big, common) { big += “”; common += “”; if (big.length &lt; ...

    大整数相乘.cpp

    假定有两个字符串表示的整形数,要求写一个函数,实现两个数字字符串的乘积,函数返回值也是字符串。我们不能直接将整形字符串转换为数字后去相乘,因为字符串表示的数字可能相当大,直接转换成数字会导致信息丢失,

    用bigint类编写大数字乘法

    用C++编写bigint类型,实现超过float容量的大数字乘法

    VB进行大整数乘法运算实例.rar

    VB进行大整数乘法运算实例,实现两个超大整数的相乘功能,是数学计算器中的一个功能部分,请注意乘数和被乘数都必须由数字组成。可以显示计算过程,可随机生成两个大整数以便测试,计算结果将显示在下边的文本框中。

    2个200位以内的数相乘(C++)

    求两个不超过200位的非负整数的积。 输入(Input) 有两行,每行是一个不超过200位的非负整数,没有多余的前导0。 The input contains two lines. Each line is a nonnegative integer with no more than 200 ...

    使用数字理论变换将数字相乘:使用数字理论变换(NTT)将非常大的数字(十六进制或十进制)有效地相乘-matlab开发

    快速将两个大数字(十六进制数或十进制数)一起相乘(小于约500,000(32位段)。multiple()函数的输入必须是长度至少为6个字符的十六进制或十进制字符数组。每个字符最多为400万个字符NTT应该提供准确的结果(在...

    乘法数字的编程

    很好的资源 编程实现两个很大的数的乘法运算 例如:157……362 × 232……179 = ?

    RSA.rar_RSA算法_寻找大素数 rsa_数论算法_简单数论

    RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。...

    计算两个整数的最大公约数

    计算两个整数的最大公约数 1、用于计算gcd(m,n)的欧几里得算法 第一步:如果n=0,返回m的值作为结果,同时过程结束;否则,进入第二步。 第二步:m除以n,将余数赋给r。 第三步:将n的值赋给m,将r的值赋给n,返回第...

    动态数组实现大数乘法

    两个大数相乘:利用数组实现,数组a存放大数1的每一位,数组b依次存放大数2的每一位。如:一大数1为3463546,则数组 a[]={3,4,6,3,5,4,6},大数2为:89019 则数组b[]={8,9,0,1,9},现在要大数1和大数2相乘,并按数位...

    超大数乘法

    对超大数做乘法计算 输入两个数即可计算相乘结果 可支持千万位 甚至更大 数数字相乘

    大整数阶乘 C++

    3.在计算中,将1-n中的每一个数字都与数组中的每一个数相乘,将与某元素的乘积仍保存在该元素中; 4.在1-n中的每个数字与所有元素做完乘积之后,依次每一个元素中的数字是否超过10(或者radix),若超过,则向前进位...

    ACM算法竞赛中的高精度加法FFT加速版

    在高精度加法中,我们将两个大整数表示为多项式形式,其中每个多项式的系数对应于整数的各个位数。然后,我们通过FFT算法计算这两个多项式的离散傅里叶变换,得到它们在复数域上的点值表示。 接着,我们将这两个...

    基于MATLAB的数字下变频器的设计与仿真应用.rar

    数字下变频的主要功能包括三个方面:第一是变频,数字混频器将数字中频信号和数控振荡器(Numerical Control Oscil- lator- - NCO)产生的正交本振信号相乘,生成 I/Q 两路混频信号,将感兴趣的信号下变频至零中频;...

    C 语言实例

    C 语言实例 – 两个数字相加 7、 C 语言实例 – 两个浮点数相乘 8、 C 语言实例 – 字符转 ASCII 码 9、 C 语言实例 – 两数相除 10、 C 语言实例 – 数值比较 11、 C 语言实例 – 计算 int, float, double 和 char ...

    javascript文档

    + 运算符 将两个数字表达式的值相加,或连接两个字符串。 ++ 运算符 变量值加 1。 += 运算符 将表达式的值加到变量中。 , 运算符 使两个表达式按顺序执行。 - 运算符 从一个表达式中减去另一个表达式的值,或对...

    JScript 语言参考

    + 运算符 将两个数字表达式的值相加,或连接两个字符串。 ++ 运算符 变量值加 1。 += 运算符 将表达式的值加到变量中。 , 运算符 使两个表达式按顺序执行。 - 运算符 从一个表达式中减去另一个表达式的值,或对...

    微软JavaScript手册

    + 运算符 将两个数字表达式的值相加,或连接两个字符串。 ++ 运算符 变量值加 1。 += 运算符 将表达式的值加到变量中。 , 运算符 使两个表达式按顺序执行。 - 运算符 从一个表达式中减去另一个表达式的值,或对...

Global site tag (gtag.js) - Google Analytics